From 825e3529e6c27fa8cbe8b3593dc3a75683708633 Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 19 Mar 2010 15:12:10 +0200 Subject: [PATCH] great changes --- online/app/controllers/application.rb | 3 + online/app/controllers/stages_controller.rb | 89 ++ online/app/controllers/statics_controller.rb | 86 ++ online/app/controllers/user_controller.rb | 72 +- online/app/helpers/stages_helper.rb | 2 + online/app/helpers/statics_helper.rb | 2 + online/app/models/stage.rb | 1 + online/app/models/static.rb | 6 + online/app/views/layouts/admin.html.erb | 2 +- online/app/views/layouts/user.fbml.erb | 12 +- online/app/views/stages/edit.html.erb | 45 + online/app/views/stages/index.html.erb | 32 + online/app/views/stages/new.html.erb | 41 + online/app/views/stages/show.html.erb | 39 + online/app/views/statics/edit.html.erb | 38 + online/app/views/statics/index.html.erb | 33 + online/app/views/statics/new.html.erb | 36 + online/app/views/statics/show.html.erb | 32 + online/app/views/user/facebook_error.erb | 8 + online/app/views/user/greetings.fbml.erb | 3 +- online/app/views/user/product.fbml.erb | 7 +- online/app/views/user/question1.fbml.erb | 2 +- online/config/routes.rb | 6 +- online/db/migrate/20091128115552_create_stages.rb | 32 - online/db/migrate/20100215112734_create_stages.rb | 25 + online/db/migrate/20100311091240_create_statics.rb | 22 + .../system/bannerpics/1/normal/megaBanner.jpg | Bin 0 -> 18009 bytes .../system/bannerpics/1/original/megaBanner.jpg | Bin 0 -> 18601 bytes .../system/bannerpics/1/small/megaBanner.jpg | Bin 0 -> 688 bytes .../public/system/bannerpics/2/normal/appoyo.jpg | Bin 0 -> 7958 bytes .../public/system/bannerpics/2/original/appoyo.jpg | Bin 0 -> 8234 bytes online/public/system/bannerpics/2/small/appoyo.jpg | Bin 0 -> 950 bytes online/public/system/feedpics/1/normal/1899065.jpg | Bin 0 -> 6108 bytes .../public/system/feedpics/1/original/1899065.jpg | Bin 0 -> 150556 bytes online/public/system/feedpics/1/small/1899065.jpg | Bin 0 -> 885 bytes .../public/system/productpics/1/normal/1899065.jpg | Bin 0 -> 21912 bytes .../system/productpics/1/original/1899065.jpg | Bin 0 -> 150556 bytes .../public/system/productpics/1/small/1899065.jpg | Bin 0 -> 885 bytes .../public/system/productpics/2/normal/1899065.jpg | Bin 0 -> 21912 bytes .../system/productpics/2/original/1899065.jpg | Bin 0 -> 150556 bytes .../public/system/productpics/2/small/1899065.jpg | Bin 0 -> 885 bytes online/test/fixtures/stages.yml | 23 + online/test/fixtures/statics.yml | 23 + online/test/functional/stages_controller_test.rb | 45 + online/test/functional/statics_controller_test.rb | 45 + online/test/unit/stage_test.rb | 8 + online/test/unit/static_test.rb | 8 + online/vendor/plugins/imagemagick_tag/README | 26 + online/vendor/plugins/imagemagick_tag/init.rb | 11 + .../plugins/imagemagick_tag/lib/image_magick.rb | 1124 ++++++++++++++++++++ .../lib/image_magick_macro_helper.rb | 128 +++ .../test/image_magick_macro_helper_test.rb | 142 +++ .../test/image_magick_macro_test.rb | 332 ++++++ online/vendor/plugins/paperclip/.gitignore | 5 + online/vendor/plugins/paperclip/LICENSE | 26 + online/vendor/plugins/paperclip/README.rdoc | 179 ++++ online/vendor/plugins/paperclip/Rakefile | 103 ++ .../plugins/paperclip/cucumber/paperclip_steps.rb | 6 + .../plugins/paperclip/generators/paperclip/USAGE | 5 + .../generators/paperclip/paperclip_generator.rb | 27 + .../paperclip/templates/paperclip_migration.rb.erb | 19 + online/vendor/plugins/paperclip/init.rb | 1 + online/vendor/plugins/paperclip/lib/paperclip.rb | 357 +++++++ .../plugins/paperclip/lib/paperclip/attachment.rb | 334 ++++++ .../lib/paperclip/callback_compatability.rb | 33 + .../plugins/paperclip/lib/paperclip/geometry.rb | 115 ++ .../paperclip/lib/paperclip/interpolations.rb | 108 ++ .../plugins/paperclip/lib/paperclip/iostream.rb | 59 + .../plugins/paperclip/lib/paperclip/matchers.rb | 33 + .../matchers/have_attached_file_matcher.rb | 57 + .../validate_attachment_content_type_matcher.rb | 75 ++ .../validate_attachment_presence_matcher.rb | 55 + .../matchers/validate_attachment_size_matcher.rb | 96 ++ .../plugins/paperclip/lib/paperclip/processor.rb | 49 + .../plugins/paperclip/lib/paperclip/storage.rb | 247 +++++ .../plugins/paperclip/lib/paperclip/style.rb | 90 ++ .../plugins/paperclip/lib/paperclip/thumbnail.rb | 75 ++ .../plugins/paperclip/lib/paperclip/upfile.rb | 50 + online/vendor/plugins/paperclip/paperclip.gemspec | 48 + .../plugins/paperclip/shoulda_macros/paperclip.rb | 117 ++ .../plugins/paperclip/tasks/paperclip_tasks.rake | 79 ++ online/vendor/plugins/paperclip/test/.gitignore | 1 + .../plugins/paperclip/test/attachment_test.rb | 764 +++++++++++++ online/vendor/plugins/paperclip/test/database.yml | 4 + .../vendor/plugins/paperclip/test/fixtures/12k.png | Bin 0 -> 12093 bytes .../plugins/paperclip/test/fixtures/50x50.png | Bin 0 -> 1615 bytes .../vendor/plugins/paperclip/test/fixtures/5k.png | Bin 0 -> 4456 bytes .../vendor/plugins/paperclip/test/fixtures/bad.png | 1 + .../vendor/plugins/paperclip/test/fixtures/s3.yml | 8 + .../plugins/paperclip/test/fixtures/text.txt | 0 .../plugins/paperclip/test/fixtures/twopage.pdf | Bin 0 -> 8775 bytes .../vendor/plugins/paperclip/test/geometry_test.rb | 177 +++ online/vendor/plugins/paperclip/test/helper.rb | 128 +++ .../plugins/paperclip/test/integration_test.rb | 483 +++++++++ .../plugins/paperclip/test/interpolations_test.rb | 124 +++ .../vendor/plugins/paperclip/test/iostream_test.rb | 78 ++ .../matchers/have_attached_file_matcher_test.rb | 24 + ...alidate_attachment_content_type_matcher_test.rb | 37 + .../validate_attachment_presence_matcher_test.rb | 26 + .../validate_attachment_size_matcher_test.rb | 51 + .../plugins/paperclip/test/paperclip_test.rb | 298 ++++++ .../plugins/paperclip/test/processor_test.rb | 10 + .../vendor/plugins/paperclip/test/storage_test.rb | 330 ++++++ online/vendor/plugins/paperclip/test/style_test.rb | 141 +++ .../plugins/paperclip/test/thumbnail_test.rb | 227 ++++ .../vendor/plugins/paperclip/test/upfile_test.rb | 36 + 106 files changed, 7923 insertions(+), 64 deletions(-) create mode 100644 online/app/controllers/stages_controller.rb create mode 100644 online/app/controllers/statics_controller.rb create mode 100644 online/app/helpers/stages_helper.rb create mode 100644 online/app/helpers/statics_helper.rb create mode 100644 online/app/models/static.rb create mode 100644 online/app/views/stages/edit.html.erb create mode 100644 online/app/views/stages/index.html.erb create mode 100644 online/app/views/stages/new.html.erb create mode 100644 online/app/views/stages/show.html.erb create mode 100644 online/app/views/statics/edit.html.erb create mode 100644 online/app/views/statics/index.html.erb create mode 100644 online/app/views/statics/new.html.erb create mode 100644 online/app/views/statics/show.html.erb create mode 100644 online/app/views/user/facebook_error.erb delete mode 100644 online/db/migrate/20091128115552_create_stages.rb create mode 100644 online/db/migrate/20100215112734_create_stages.rb create mode 100644 online/db/migrate/20100311091240_create_statics.rb create mode 100644 online/public/system/bannerpics/1/normal/megaBanner.jpg create mode 100644 online/public/system/bannerpics/1/original/megaBanner.jpg create mode 100644 online/public/system/bannerpics/1/small/megaBanner.jpg create mode 100644 online/public/system/bannerpics/2/normal/appoyo.jpg create mode 100644 online/public/system/bannerpics/2/original/appoyo.jpg create mode 100644 online/public/system/bannerpics/2/small/appoyo.jpg create mode 100644 online/public/system/feedpics/1/normal/1899065.jpg create mode 100644 online/public/system/feedpics/1/original/1899065.jpg create mode 100644 online/public/system/feedpics/1/small/1899065.jpg create mode 100644 online/public/system/productpics/1/normal/1899065.jpg create mode 100644 online/public/system/productpics/1/original/1899065.jpg create mode 100644 online/public/system/productpics/1/small/1899065.jpg create mode 100644 online/public/system/productpics/2/normal/1899065.jpg create mode 100644 online/public/system/productpics/2/original/1899065.jpg create mode 100644 online/public/system/productpics/2/small/1899065.jpg create mode 100644 online/test/fixtures/stages.yml create mode 100644 online/test/fixtures/statics.yml create mode 100644 online/test/functional/stages_controller_test.rb create mode 100644 online/test/functional/statics_controller_test.rb create mode 100644 online/test/unit/stage_test.rb create mode 100644 online/test/unit/static_test.rb create mode 100644 online/vendor/plugins/imagemagick_tag/README create mode 100644 online/vendor/plugins/imagemagick_tag/init.rb create mode 100644 online/vendor/plugins/imagemagick_tag/lib/image_magick.rb create mode 100644 online/vendor/plugins/imagemagick_tag/lib/image_magick_macro_helper.rb create mode 100644 online/vendor/plugins/imagemagick_tag/test/image_magick_macro_helper_test.rb create mode 100644 online/vendor/plugins/imagemagick_tag/test/image_magick_macro_test.rb create mode 100644 online/vendor/plugins/paperclip/.gitignore create mode 100644 online/vendor/plugins/paperclip/LICENSE create mode 100644 online/vendor/plugins/paperclip/README.rdoc create mode 100644 online/vendor/plugins/paperclip/Rakefile create mode 100644 online/vendor/plugins/paperclip/cucumber/paperclip_steps.rb create mode 100644 online/vendor/plugins/paperclip/generators/paperclip/USAGE create mode 100644 online/vendor/plugins/paperclip/generators/paperclip/paperclip_generator.rb create mode 100644 online/vendor/plugins/paperclip/generators/paperclip/templates/paperclip_migration.rb.erb create mode 100644 online/vendor/plugins/paperclip/init.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/attachment.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/callback_compatability.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/geometry.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/interpolations.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/iostream.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/matchers.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/matchers/have_attached_file_matcher.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_presence_matcher.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_size_matcher.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/processor.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/storage.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/style.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/thumbnail.rb create mode 100644 online/vendor/plugins/paperclip/lib/paperclip/upfile.rb create mode 100644 online/vendor/plugins/paperclip/paperclip.gemspec create mode 100644 online/vendor/plugins/paperclip/shoulda_macros/paperclip.rb create mode 100644 online/vendor/plugins/paperclip/tasks/paperclip_tasks.rake create mode 100644 online/vendor/plugins/paperclip/test/.gitignore create mode 100644 online/vendor/plugins/paperclip/test/attachment_test.rb create mode 100644 online/vendor/plugins/paperclip/test/database.yml create mode 100644 online/vendor/plugins/paperclip/test/fixtures/12k.png create mode 100644 online/vendor/plugins/paperclip/test/fixtures/50x50.png create mode 100644 online/vendor/plugins/paperclip/test/fixtures/5k.png create mode 100644 online/vendor/plugins/paperclip/test/fixtures/bad.png create mode 100644 online/vendor/plugins/paperclip/test/fixtures/s3.yml create mode 100644 online/vendor/plugins/paperclip/test/fixtures/text.txt create mode 100644 online/vendor/plugins/paperclip/test/fixtures/twopage.pdf create mode 100644 online/vendor/plugins/paperclip/test/geometry_test.rb create mode 100644 online/vendor/plugins/paperclip/test/helper.rb create mode 100644 online/vendor/plugins/paperclip/test/integration_test.rb create mode 100644 online/vendor/plugins/paperclip/test/interpolations_test.rb create mode 100644 online/vendor/plugins/paperclip/test/iostream_test.rb create mode 100644 online/vendor/plugins/paperclip/test/matchers/have_attached_file_matcher_test.rb create mode 100644 online/vendor/plugins/paperclip/test/matchers/validate_attachment_content_type_matcher_test.rb create mode 100644 online/vendor/plugins/paperclip/test/matchers/validate_attachment_presence_matcher_test.rb create mode 100644 online/vendor/plugins/paperclip/test/matchers/validate_attachment_size_matcher_test.rb create mode 100644 online/vendor/plugins/paperclip/test/paperclip_test.rb create mode 100644 online/vendor/plugins/paperclip/test/processor_test.rb create mode 100644 online/vendor/plugins/paperclip/test/storage_test.rb create mode 100644 online/vendor/plugins/paperclip/test/style_test.rb create mode 100644 online/vendor/plugins/paperclip/test/thumbnail_test.rb create mode 100644 online/vendor/plugins/paperclip/test/upfile_test.rb diff --git a/online/app/controllers/application.rb b/online/app/controllers/application.rb index 4ad1375..265d2b6 100644 --- a/online/app/controllers/application.rb +++ b/online/app/controllers/application.rb @@ -8,6 +8,9 @@ class ApplicationController < ActionController::Base # Uncomment the :secret if you're not using the cookie session store #protect_from_forgery :secret => '0fcc823b7dcd071c84967c35c10e155c' before_filter :instantiate_controller_and_action_names + + Feed_useraction_instruction = "Next tags are avaliable: {owner_name},{friends_names},{his/her},{he/she},{him/her},{number_of_friends}" + Feed_selfaction_instruction = "Do not start with {owner_name}, cause it is already starts with it on the wall of the user." def instantiate_controller_and_action_names @current_action = action_name diff --git a/online/app/controllers/stages_controller.rb b/online/app/controllers/stages_controller.rb new file mode 100644 index 0000000..b215262 --- /dev/null +++ b/online/app/controllers/stages_controller.rb @@ -0,0 +1,89 @@ +class StagesController < ApplicationController + # GET /stages + # GET /stages.xml + layout "admin" + + def index + @stages = Stage.find(:all) + + respond_to do |format| + format.html # index.html.erb + format.xml { render :xml => @stages } + end + end + + # GET /stages/1 + # GET /stages/1.xml + def show + @stage = Stage.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.xml { render :xml => @stage } + end + end + + # GET /stages/new + # GET /stages/new.xml + def new + @stage = Stage.new + + respond_to do |format| + format.html # new.html.erb + format.xml { render :xml => @stage } + end + end + + # GET /stages/1/edit + def edit + @stage = Stage.find(params[:id]) + end + + # POST /stages + # POST /stages.xml + def create + @stage = Stage.new(params[:stage]) + + respond_to do |format| + if @stage.save + flash[:notice] = 'Stage was successfully created.' + format.html { redirect_to(@stage) } + format.xml { render :xml => @stage, :status => :created, :location => @stage } + else + format.html { render :action => "new" } + format.xml { render :xml => @stage.errors, :status => :unprocessable_entity } + end + end + end + + # PUT /stages/1 + # PUT /stages/1.xml + def update + + @stage = Stage.find(params[:id]) + p ">" * 100 + p params + respond_to do |format| + if @stage.update_attributes(params[:stage]) + flash[:notice] = 'Stage was successfully updated.' + format.html { redirect_to(@stage) } + format.xml { head :ok } + else + format.html { render :action => "edit" } + format.xml { render :xml => @stage.errors, :status => :unprocessable_entity } + end + end + end + + # DELETE /stages/1 + # DELETE /stages/1.xml + def destroy + @stage = Stage.find(params[:id]) + @stage.destroy + + respond_to do |format| + format.html { redirect_to(stages_url) } + format.xml { head :ok } + end + end +end diff --git a/online/app/controllers/statics_controller.rb b/online/app/controllers/statics_controller.rb new file mode 100644 index 0000000..5d3aa8d --- /dev/null +++ b/online/app/controllers/statics_controller.rb @@ -0,0 +1,86 @@ +class StaticsController < ApplicationController + # GET /statics + # GET /statics.xml + layout "admin" + def index + @statics = Static.find(:all) + + respond_to do |format| + format.html # index.html.erb + format.xml { render :xml => @statics } + end + end + + # GET /statics/1 + # GET /statics/1.xml + def show + @static = Static.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.xml { render :xml => @static } + end + end + + # GET /statics/new + # GET /statics/new.xml + def new + @static = Static.new + + respond_to do |format| + format.html # new.html.erb + format.xml { render :xml => @static } + end + end + + # GET /statics/1/edit + def edit + @static = Static.find(params[:id]) + end + + # POST /statics + # POST /statics.xml + def create + @static = Static.new(params[:static]) + + respond_to do |format| + if @static.save + flash[:notice] = 'Static was successfully created.' + format.html { redirect_to(@static) } + format.xml { render :xml => @static, :status => :created, :location => @static } + else + format.html { render :action => "new" } + format.xml { render :xml => @static.errors, :status => :unprocessable_entity } + end + end + end + + # PUT /statics/1 + # PUT /statics/1.xml + def update + @static = Static.find(params[:id]) + + respond_to do |format| + if @static.update_attributes(params[:static]) + flash[:notice] = 'Static was successfully updated.' + format.html { redirect_to(@static) } + format.xml { head :ok } + else + format.html { render :action => "edit" } + format.xml { render :xml => @static.errors, :status => :unprocessable_entity } + end + end + end + + # DELETE /statics/1 + # DELETE /statics/1.xml + def destroy + @static = Static.find(params[:id]) + @static.destroy + + respond_to do |format| + format.html { redirect_to(statics_url) } + format.xml { head :ok } + end + end +end diff --git a/online/app/controllers/user_controller.rb b/online/app/controllers/user_controller.rb index 1d3bbb4..48519a4 100644 --- a/online/app/controllers/user_controller.rb +++ b/online/app/controllers/user_controller.rb @@ -2,16 +2,39 @@ class UserController < ApplicationController ensure_application_is_installed_by_facebook_user before_filter :source_statistic + before_filter :loading_static FB_app_link = "http://apps.facebook.com/friendshipchallenge" Promotion1 = "Take the Nokia E72 friendship challenge now to know your friends better and win up to 6 Nokia E72 devices." Pic_link = "http://img.gsmarena.com/vv/bigpic/nokia-e72.jpg" Feed_action = "Know better your friends" + + def source_statistic if (params[:f]) && (params[:f].to_i != 0) add_stat(0, VISITED, params[:f] ? params[:f].to_i : 0) end end + def loading_static + @statics = Static.find(:first) + if @statics == nil + render :facebook_error + end + end + "Example '{owner_name}, I chat with you the most. I also picked {friends_names}. Let's stay in touch'" + + def processing_phraze (text_to_process, owner_name, friends_names,gender = "",number_of_friends = 0) + text = text_to_process + text = text.gsub("{owner_name}",owner_name) + text = text.gsub("{friends_names}",friends_names) + text = text.gsub("{number_of_friends}",number_of_friends.to_s) + text = text.gsub("{his/her}", gender == "female" ? "her": "his") + text = text.gsub("{he/she}",gender == "female" ? "she": "he") + text = text.gsub("{him/her}",gender == "female" ? "her": "him") + + return text + #text = text.gsub("{friends_names}",friends_names) + end def permission @userF = session[:facebook_session].user if @userF.has_permission?("publish_stream") && session[:facebook_session].user.has_permission?("email") @@ -68,11 +91,28 @@ class UserController < ApplicationController end #end if @fbuser == nil end + today_question_select render :action => "question1" end end + + def today_question_select + today_now = Time.now + today = Date.new(today_now.year,today_now.month,today_now.day) + @today_question = Stage.find(:first, :conditions => ["date = ?", today ] ) + + if @today_question.blank? + @today_question = Stage.find(:first, :order => "id DESC" ) + if @today_question.blank? + render :facebook_error + end + end + end def question1 + + today_question_select + user_has_published_once = false user_has_published_once = question_processor 1 if user_has_published_once == true @@ -126,7 +166,6 @@ class UserController < ApplicationController self_publishing = "" scenario_themself = "" #preparing all names into array - debugger for i in 0..(users_array.size - 1) user_names << users_array[i].first_name end @@ -152,34 +191,23 @@ class UserController < ApplicationController self_publishing = users_array[i].first_name + "" end if themessage != "" - themessage += "." + themessage += "" end session[:self_publishing] = self_publishing #publishing if question_number == 1 - scenario_friend = "#{users_array[i].first_name}, I chat with you the most. #{themessage != "" ? "I also picked" : ""} #{themessage} Let's stay in touch" - - scenario_themself = "selected #{@userFB.sex == "female" ? "her": "his"} top #{user_names.size()} friend#{user_names.size() == 1 ? "" : "s"} #{@userFB.sex == "female" ? "she": "he"} chat the most to win Nokia E72: #{self_publishing}. How well do you know your friends? Answer and win now!" - debug_message scenario_friend - publishing(@userFB,users_array[i],scenario_friend,Feed_action,FB_app_link,Promotion1,FB_app_link,Promotion1,'image',Pic_link,FB_app_link) - elsif question_number == 2 - - scenario_friend = "#{users_array[i].first_name}, you are one of my #{user_names.size()} person in the first row whom I would invite to my Birthday. #{themessage != "" ? "I also picked" : ""} #{themessage} Let's stay in touch" - scenario_themself = "selected #{@userFB.sex == "female" ? "her": "his"} top #{user_names.size()} friend#{user_names.size() == 1 ? "" : "s"} whom #{@userFB.sex == "female" ? "she": "he"} would invite to Birthday in the first raw to win Nokia E72: #{self_publishing}. How well do you know your friends? Answer and win now!" - debug_message scenario_friend - publishing(@userFB,users_array[i],scenario_friend,Feed_action,FB_app_link,Promotion1,FB_app_link,Promotion1,'image',Pic_link,FB_app_link) - elsif question_number == 3 - p "Publishing: > > > > >" - scenario_friend = "#{users_array[i].first_name}, you are one of my #{user_names.size()} most sporty friends. #{themessage != "" ? "I also picked" : ""} #{themessage} Let's stay in touch" - scenario_themself = "selected #{@userFB.sex == "female" ? "her": "his"} top sporty #{user_names.size()} friend#{user_names.size() == 1 ? "" : "s"} to win Nokia E72: #{self_publishing}. How well do you know your friends? Answer and win now!" + + scenario_friend = processing_phraze (@today_question.feed_useraction, users_array[i].first_name, themessage,@userFB.sex,user_names.size()) + scenario_themself = processing_phraze(@today_question.feed_selfaction, users_array[i].first_name, self_publishing,@userFB.sex,user_names.size()) + debug_message scenario_friend - publishing(@userFB,users_array[i],scenario_friend,Feed_action,FB_app_link,Promotion1,FB_app_link,Promotion1,'image',Pic_link,FB_app_link) - #end of if question_number == 1 + publishing(@userFB,users_array[i],scenario_friend,Feed_action,FB_app_link,@today_question.feedtext1,FB_app_link,@today_question.feedtext2,'image',Current_site + @today_question.feedpic.url(:normal),FB_app_link) end #end of for i in 0..users_array.size end debug_message scenario_themself - publishing(@userFB,@userFB,scenario_themself,Feed_action,FB_app_link,Promotion1,FB_app_link,Promotion1,'image',Pic_link,FB_app_link) + debug_message @today_question.feedpic.url(:normal) + publishing(@userFB,@userFB,scenario_themself,Feed_action,FB_app_link,@today_question.feedtext1,FB_app_link,@today_question.feedtext2,'image',Current_site + @today_question.feedpic.url(:normal),FB_app_link) # if user_has_published_once == true end return user_has_published_once @@ -207,7 +235,9 @@ class UserController < ApplicationController def fanpage end - + + def facebook_error + end def publishing(user_from,user_to,main_message,action_link_text,action_link_href,attachment_name,attachment_href,attachment_caption,media_type,media_src,media_href) user_from.publish_to(user_to, :message => main_message, diff --git a/online/app/helpers/stages_helper.rb b/online/app/helpers/stages_helper.rb new file mode 100644 index 0000000..93ca31e --- /dev/null +++ b/online/app/helpers/stages_helper.rb @@ -0,0 +1,2 @@ +module StagesHelper +end diff --git a/online/app/helpers/statics_helper.rb b/online/app/helpers/statics_helper.rb new file mode 100644 index 0000000..7d485f2 --- /dev/null +++ b/online/app/helpers/statics_helper.rb @@ -0,0 +1,2 @@ +module StaticsHelper +end diff --git a/online/app/models/stage.rb b/online/app/models/stage.rb index 7be15ea..d380498 100644 --- a/online/app/models/stage.rb +++ b/online/app/models/stage.rb @@ -1,2 +1,3 @@ class Stage < ActiveRecord::Base + has_attached_file :feedpic, :styles => { :normal => "130x130>", :small => "30x30>"} end diff --git a/online/app/models/static.rb b/online/app/models/static.rb new file mode 100644 index 0000000..99f06c0 --- /dev/null +++ b/online/app/models/static.rb @@ -0,0 +1,6 @@ +class Static < ActiveRecord::Base + +has_attached_file :productpic, :styles => { :normal => "250x250>", :small => "30x30>" } +has_attached_file :bannerpic, :styles => { :normal => "750x200>", :small => "50x20>" } + +end diff --git a/online/app/views/layouts/admin.html.erb b/online/app/views/layouts/admin.html.erb index 7086410..33eaf27 100644 --- a/online/app/views/layouts/admin.html.erb +++ b/online/app/views/layouts/admin.html.erb @@ -14,7 +14,7 @@
<% if (cookies[:auth] == "ok") %> - <%= link_to "View active users", {:controller => "admin", :action => "index"} %> | <%= link_to "View disabled users", deleted_path %> | <%= link_to "Statistics", stat_path %> | <%= link_to "Questions", "#" %> | <%= link_to "Product", "#" %> | <%=link_to "Sign out", signout_path %> + <%= link_to "View active users", {:controller => "admin", :action => "index"} %> | <%= link_to "View disabled users", deleted_path %> | <%= link_to "Statistics", stat_path %> | <%= link_to "Questions", stages_path %> | <%= link_to "Product & Banner", statics_path %> | <%=link_to "Sign out", signout_path %> <% end %> <%= yield %> diff --git a/online/app/views/layouts/user.fbml.erb b/online/app/views/layouts/user.fbml.erb index a2e6b1c..9a6b862 100644 --- a/online/app/views/layouts/user.fbml.erb +++ b/online/app/views/layouts/user.fbml.erb @@ -25,11 +25,11 @@
  • > - Nokia E72 + <%=@statics.product_tab_name %>
  • - > + > Become a fan
  • @@ -37,7 +37,9 @@

    -<%= yield %> +
    + <%= yield %> +



    @@ -48,7 +50,7 @@

    - - <%=image_tag("banner.jpg")%> + + <%=image_tag(@statics.bannerpic.url(:normal))%>
    diff --git a/online/app/views/stages/edit.html.erb b/online/app/views/stages/edit.html.erb new file mode 100644 index 0000000..79a6f2c --- /dev/null +++ b/online/app/views/stages/edit.html.erb @@ -0,0 +1,45 @@ +

    Editing stage

    + +<% form_for(@stage, :html => { :multipart => true }) do |f| %> + <%= f.error_messages %> + +

    + <%= f.label :date %>
    + <%= f.date_select :date %> +

    +

    + <%= f.label :question %>
    + <%= f.text_area :question, :size => "60x2" %> +

    +

    + <%= f.label :feed_useraction %>
    + <%= ApplicationController::Feed_useraction_instruction %>
    + + <%= f.text_area :feed_useraction, :size => "60x4" %> +

    +

    + <%= f.label :feed_selfaction %>
    + <%= ApplicationController::Feed_selfaction_instruction %>
    + <%= f.text_area :feed_selfaction, :size => "60x4" %> +

    +

    + <%= f.label :feedtext1 %>
    + <%= f.text_area :feedtext1, :size => "60x2" %> +

    +

    + <%= f.label :feedtext2 %>
    + <%= f.text_area :feedtext2, :size => "60x2" %> +

    +

    + + <%= image_tag @stage.feedpic.url(:normal) %> +

    + Feed Pic
    + <%= f.file_field :feedpic %> +

    + <%= f.submit "Update" %> +

    +<% end %> + +<%= link_to 'Show', @stage %> | +<%= link_to 'Back', stages_path %> diff --git a/online/app/views/stages/index.html.erb b/online/app/views/stages/index.html.erb new file mode 100644 index 0000000..9b1f7ef --- /dev/null +++ b/online/app/views/stages/index.html.erb @@ -0,0 +1,32 @@ +

    Listing stages

    + + + + + + + + + + + + + +<% for stage in @stages %> + + + + + + + + + + + + +<% end %> +
    Date |Question |Feed useraction |Feed selfaction |Feedtext1 |Feedtext2 |Feedpic
    <%=h stage.date %><%=h stage.question %><%=h stage.feed_useraction %><%=h stage.feed_selfaction %><%=h stage.feedtext1 %><%=h stage.feedtext2 %><%= image_tag stage.feedpic.url(:small) %><%= link_to 'Show', stage %><%= link_to 'Edit', edit_stage_path(stage) %><%= link_to 'Destroy', stage, :confirm => 'Are you sure?', :method => :delete %>
    + +
    +<%= link_to 'New stage', new_stage_path %> diff --git a/online/app/views/stages/new.html.erb b/online/app/views/stages/new.html.erb new file mode 100644 index 0000000..1ac5a21 --- /dev/null +++ b/online/app/views/stages/new.html.erb @@ -0,0 +1,41 @@ +

    New stage

    + +<% form_for(@stage, :html => { :multipart => true }) do |f| %> + <%= f.error_messages %> + +

    + <%= f.label :date %>
    + <%= f.date_select :date %> +

    +

    + <%= f.label :question %>
    + <%= f.text_area :question, :size => "60x2" %> +

    +

    + <%=ApplicationController::Feed_useraction_instruction %> + <%= f.label :feed_useraction %>
    + <%= f.text_area :feed_useraction, :size => "60x4" %> +

    +

    + <%=ApplicationController::Feed_selfaction_instruction %> + <%= f.label :feed_selfaction %>
    + <%= f.text_area :feed_selfaction, :size => "60x4" %> +

    +

    + <%= f.label :feedtext1 %>
    + <%= f.text_area :feedtext1, :size => "60x4" %> +

    +

    + <%= f.label :feedtext2 %>
    + <%= f.text_area :feedtext2, :size => "60x4" %> +

    +

    + Feed Pic
    + <%= f.file_field :feedpic %> +

    +

    + <%= f.submit "Create" %> +

    +<% end %> + +<%= link_to 'Back', stages_path %> diff --git a/online/app/views/stages/show.html.erb b/online/app/views/stages/show.html.erb new file mode 100644 index 0000000..5e35ff8 --- /dev/null +++ b/online/app/views/stages/show.html.erb @@ -0,0 +1,39 @@ +

    + Question date:
    + <%=h @stage.date %> +

    + +

    + Question:
    + <%=h @stage.question %> +

    + +

    + Feed useraction:
    + <%=h @stage.feed_useraction %> +

    + +

    + Feed selfaction:
    + <%=h @stage.feed_selfaction %> +

    + +

    + Feedtext1:
    + <%=h @stage.feedtext1 %> +

    + +

    + Feedtext2:
    + <%=h @stage.feedtext2 %> +

    + +

    + Feedpic file name:
    + <%= image_tag @stage.feedpic.url(:normal)%> +

    + + + +<%= link_to 'Edit', edit_stage_path(@stage) %> | +<%= link_to 'Back', stages_path %> diff --git a/online/app/views/statics/edit.html.erb b/online/app/views/statics/edit.html.erb new file mode 100644 index 0000000..49e44fc --- /dev/null +++ b/online/app/views/statics/edit.html.erb @@ -0,0 +1,38 @@ +

    Editing static

    + +<% form_for(@static, :html => { :multipart => true }) do |f| %> + <%= f.error_messages %> + +

    + <%= f.label :product_tab_name %>
    + <%= f.text_field :product_tab_name %> +

    +

    + <%= f.label :product_description %>
    + <%= f.text_area :product_description, :size => "60x4" %> +

    +

    + <%= f.label :productpic_file %>
    + <%= image_tag @static.productpic.url(:normal)%>
    + <%= f.file_field :productpic %> +

    +

    + <%= f.label :bannerpic_file %>
    + <%= image_tag @static.bannerpic.url(:normal)%>
    + <%= f.file_field :bannerpic %> +

    +

    + <%= f.label :banner_link %>
    + <%= f.text_field :banner_link, :size => "60x1" %> +

    +

    + <%= f.label :greetings %>
    + <%= f.text_field :greetings, :size => "60x4" %> +

    +

    + <%= f.submit "Update" %> +

    +<% end %> + +<%= link_to 'Show', @static %> | +<%= link_to 'Back', statics_path %> diff --git a/online/app/views/statics/index.html.erb b/online/app/views/statics/index.html.erb new file mode 100644 index 0000000..e65f66f --- /dev/null +++ b/online/app/views/statics/index.html.erb @@ -0,0 +1,33 @@ +

    Listing statics

    + + + + + + + + + + + + +<% for static in @statics %> + + + + + + + + + + + + +<% end %> +
    Tab name | Product description | Product picture | Banner | Banner linkGreetings
    <%=h static.product_tab_name %><%=h static.product_description %><%= image_tag static.productpic.url(:small) %><%= image_tag static.bannerpic.url(:small) %><%=h static.banner_link %><%=h static.greetings %><%= link_to 'Show', static %><%= link_to 'Edit', edit_static_path(static) %><%= link_to 'Destroy', static, :confirm => 'Are you sure?', :method => :delete %>
    + +
    +<% if @statics.blank? %> +<%= link_to 'New static info', new_static_path %> +<% end %> diff --git a/online/app/views/statics/new.html.erb b/online/app/views/statics/new.html.erb new file mode 100644 index 0000000..9f2b322 --- /dev/null +++ b/online/app/views/statics/new.html.erb @@ -0,0 +1,36 @@ +

    New static

    + +<% form_for(@static, :html => { :multipart => true }) do |f| %> + <%= f.error_messages %> + +

    + <%= f.label :product_tab_name %>
    + <%= f.text_field :product_tab_name %> +

    +

    + <%= f.label :product_description %>
    + <%= f.text_area :product_description, :size => "60x2" %> +

    +

    + <%= f.label :productpic_file %>
    + <%= f.file_field :productpic %> +

    +

    + <%= f.label :bannerpic_file %>
    + <%= f.file_field :bannerpic %> +

    +

    + <%= f.label :banner_link %>
    + <%= f.text_field :banner_link, :size => "60x1" %> +

    +

    + <%= f.label :greetings %>
    + <%= f.text_field :greetings, :size => "60x4" %> +

    + +

    + <%= f.submit "Add" %> +

    +<% end %> + +<%= link_to 'Back', statics_path %> diff --git a/online/app/views/statics/show.html.erb b/online/app/views/statics/show.html.erb new file mode 100644 index 0000000..2b4fead --- /dev/null +++ b/online/app/views/statics/show.html.erb @@ -0,0 +1,32 @@ +

    + Product tab name:
    + <%=h @static.product_tab_name %> +

    + +

    + Product description:
    + <%=h @static.product_description %> +

    + + +

    + Product picture:
    + + <%= image_tag @static.productpic.url(:normal)%> +

    + +

    + Banner picture:
    + <%= image_tag @static.bannerpic.url(:normal)%> +

    +

    + Banner link:
    + <%=h @static.banner_link %> +

    +

    + Greetings:
    + <%=h @static.greetings %> +

    + +<%= link_to 'Edit', edit_static_path(@static) %> | +<%= link_to 'Back', statics_path %> diff --git a/online/app/views/user/facebook_error.erb b/online/app/views/user/facebook_error.erb new file mode 100644 index 0000000..e35baba --- /dev/null +++ b/online/app/views/user/facebook_error.erb @@ -0,0 +1,8 @@ +
    +
    + + Sorry, but there are not enough data to show something to you. + +
    + + diff --git a/online/app/views/user/greetings.fbml.erb b/online/app/views/user/greetings.fbml.erb index 38b883f..98f66df 100644 --- a/online/app/views/user/greetings.fbml.erb +++ b/online/app/views/user/greetings.fbml.erb @@ -18,8 +18,7 @@
    - Congratulations! You are now in the draw
    - to win up to 6 Nokia E72 devices.
    + <%=@statics.greetings %>


    diff --git a/online/app/views/user/product.fbml.erb b/online/app/views/user/product.fbml.erb index fcbb649..eb38aa9 100644 --- a/online/app/views/user/product.fbml.erb +++ b/online/app/views/user/product.fbml.erb @@ -1,3 +1,8 @@
    - <%=image_tag("nokiapic.jpg")%> + <%=image_tag(@statics.productpic.url(:normal))%> +
    +
    + + <%=@statics.product_description%> +
    diff --git a/online/app/views/user/question1.fbml.erb b/online/app/views/user/question1.fbml.erb index 962066b..9afe956 100644 --- a/online/app/views/user/question1.fbml.erb +++ b/online/app/views/user/question1.fbml.erb @@ -1,7 +1,7 @@
    - Which of your 5 friends do you chat with the most? + <%=@today_question.question%>

    diff --git a/online/config/routes.rb b/online/config/routes.rb index daa3330..5b62573 100644 --- a/online/config/routes.rb +++ b/online/config/routes.rb @@ -1,4 +1,8 @@ ActionController::Routing::Routes.draw do |map| + map.resources :statics + + map.resources :stages + # The priority is based upon order of creation: first created -> highest priority. # Sample of regular route: @@ -53,7 +57,7 @@ ActionController::Routing::Routes.draw do |map| map.question2 '/question2', :controller => 'user', :action => 'question2' map.question3 '/question3', :controller => 'user', :action => 'question3' map.iframe '/iframe', :controller => 'iframe', :action => 'index' - map.root :controller => "user", :action => "permission" + map.root :controller => "user", :action => "permission" map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' end diff --git a/online/db/migrate/20091128115552_create_stages.rb b/online/db/migrate/20091128115552_create_stages.rb deleted file mode 100644 index b365a83..0000000 --- a/online/db/migrate/20091128115552_create_stages.rb +++ /dev/null @@ -1,32 +0,0 @@ -class CreateStages < ActiveRecord::Migration - def self.up - create_table :stages do |t| - - t.boolean :is_choosen - t.text :question1 - t.text :question2 - t.text :question3 - - t.text :feed_useraction - t.text :feedtext1 - t.text :feedtext2 - - t.string :feedpic_file_name - t.string :feedpic_content_type - t.integer :feedpic_file_size - - t.text :users_was_posted - - t.string :mainpic_file_name - t.string :mainpic_content_type - t.integer :mainpic_file_size - - t.timestamps - end - execute %{ALTER TABLE stages CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin} - end - - def self.down - drop_table :stages - end -end diff --git a/online/db/migrate/20100215112734_create_stages.rb b/online/db/migrate/20100215112734_create_stages.rb new file mode 100644 index 0000000..589606b --- /dev/null +++ b/online/db/migrate/20100215112734_create_stages.rb @@ -0,0 +1,25 @@ +class CreateStages < ActiveRecord::Migration + def self.up + create_table :stages do |t| + t.date :date + t.text :question + + t.text :feed_useraction + t.text :feed_selfaction + t.text :feedtext1 + t.text :feedtext2 + + + + t.string :feedpic_file_name + t.string :feedpic_content_type + t.integer :feedpic_file_size + + end + execute %{ALTER TABLE users CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin} + end + + def self.down + drop_table :stages + end +end diff --git a/online/db/migrate/20100311091240_create_statics.rb b/online/db/migrate/20100311091240_create_statics.rb new file mode 100644 index 0000000..ace710e --- /dev/null +++ b/online/db/migrate/20100311091240_create_statics.rb @@ -0,0 +1,22 @@ +class CreateStatics < ActiveRecord::Migration + def self.up + create_table :statics do |t| + t.string :product_tab_name + t.text :product_description + t.string :productpic_file_name + t.string :productpic_content_type + t.integer :productpic_file_size + t.string :bannerpic_file_name + t.string :bannerpic_content_type + t.integer :bannerpic_file_size + t.string :banner_link + t.string :greetings + + t.timestamps + end + end + + def self.down + drop_table :statics + end +end diff --git a/online/public/system/bannerpics/1/normal/megaBanner.jpg b/online/public/system/bannerpics/1/normal/megaBanner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c677daf5aafa7e3d7ead4678ceacb1d86bf03fa GIT binary patch literal 18009 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�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 W7>dFfXelld5|o6Eo?iV9zyH}(T@I-L literal 0 HcwPel00001 diff --git a/online/public/system/bannerpics/2/normal/appoyo.jpg b/online/public/system/bannerpics/2/normal/appoyo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b72b63d22941a1cc2ecd152a94b8382e89c9479 GIT binary patch literal 7958 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 X$FPj}GQ4iCiwNubjeprg|FrO5FOypP literal 0 HcwPel00001 diff --git a/online/public/system/bannerpics/2/original/appoyo.jpg b/online/public/system/bannerpics/2/original/appoyo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4506538069abcc492dbf19f739a512a6d51593a0 GIT binary patch literal 8234 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 literal 0 HcwPel00001 diff --git a/online/public/system/bannerpics/2/small/appoyo.jpg b/online/public/system/bannerpics/2/small/appoyo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e3b1d17ea297ef477cb5c96c24f5dbcf21b2cc7 GIT binary patch literal 950 zcwYN|!cTsTqHxe=&Xl97QK6LjI78~ zf@vIe`4M>>7<}Z9q(2NH|nj73z)o}Wxh}OmrGkDw(jD!y1wSX zyrWjJQd`cPbQetC>sP2}`+loRYW%a3h&vHlTXzR9-u1dvsx(UJCP(neiLAL(R9zm- z>0>;2&_+g9OkGTDdRAE0@*k^gv$9*)ODJ{~U7sT45YBwcL)o5P^1@wS*Ubs5VyATH zdQS~sWgMSpwa23?Ju6V5KGHMa;>1Dg#y@43cE(?LrDa_$Vzhq#y%o(1cUfQIj=Ht| zZQAw1jui!Yi`R=C%+=YmwmT1SvM#8 z@5-yHSO4h^>2L(m=+azN*+}C{r$?Lw&f~+`Z8a?5A@|Z^y`M>+k5=iIPO>Q zRPKIz_w)APrp@tD5mVQ9Jzl4qw_~~3R#8nam6a}YCi$;apPP|zo@L6;<13Ffa30_A JH$(9MO#mjZTfG1P literal 0 HcwPel00001 diff --git a/online/public/system/feedpics/1/normal/1899065.jpg b/online/public/system/feedpics/1/normal/1899065.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3861c49d31bc1e05876ad2628a83b94ce78412ab GIT binary patch literal 6108 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 literal 0 HcwPel00001 diff --git a/online/public/system/productpics/1/normal/1899065.jpg b/online/public/system/productpics/1/normal/1899065.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9221e153e463fdcaa622e48d74d073dea4081c51 GIT binary patch literal 21912 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�m(iysQ=U3`sOApx?o}Zjn_*BZqhX4@^^8$6iLjy1g6!strT~# zALuefI5fkAlP%z7*#Pu8dbz26kFz|O-`Z#wpPv_vG{AwwRgw%Kfil@ZXiA@Q$zGLI zEe!$LYtc25Ss_+sP6xS~(CqE6v4TjSsI^p_Tt-wC51a*e#0n}u9Tyue26mt4MZAQp z_|a=kJLFZldKOVJO9jU+CdG6WM?gK4MRH@a+0vF{({<=TaOflSVqlpXdJ@}p?6X+! z7ZgD?9_;Sh1C1xC+XIATk`EarfC@12F)+dn^?r~6!w2jg3C*tn>6|Y_LWyOw&bXgL z2%i)^vu&jpEdTUET?lid?9MbSh{W5iQed_XOu+z&usSRaYvr9Q+;6Jd8WmCt8L zQczOI)92)1vVT-FASa_FqNqVS1nZUq%#V{_Ztcz$(q3D4_{EIJ85Kr&)#xCPV+joj zJ5^O!URD_+of1=AAHO-GIEnnUY73bxREt?hftf`a5d_lhIwMyPMG8R+?^nUED?KA3 zMMwP&BQBNIK)whhfIb#iP;IrX1H~%_!HjE~tol}drcGQW1@t^Q6Fu=hL54TM(>kHQ zEN=yIzKqDalD_!{tS90C)yUdxcxj56&NKRzu9?TRN@tpcc$0e4`PTao2;LSz#$aMx zDmh%b)IWhm>NhF&NBvKg=S85@1?u$EjY(E-g29rX6HdD(aRx&SE7S1ML23ZrZ7;^- zIfFy})yvj!E8EIu@-#l@`ARs7K5e?r)E(AZIc+s8cSIO^`a#pKva7*b!nhqA*-eRCBv{8SuM91;c+IappM4h1Ur1EQ{aLc ze?;YoNoUon2s5=jti654$HSI>xpmzM@~;khE6S)awqOMKu%i1`Ea)L zG8>u$#u#sri)D?P4}0fk36 zx|9T*7O#d`T5EEfDg^tK`A!%#P4$U(@S)I9ie41~0BX&#_Vja^>%!`o#o_k(f%d!_ z=aKPJ8=G8?UpHB4Zj(e)y;;+XnFvhUk5+wCQK*3-EWz%(X{q*ft160J4(=b5I3#do3*^*}_ z1oDy(nB{B&3)5MAdeoSQ?NRnmoajGPw%YcRcp6|%*06Gz#PhK{+>g#?D^=w>f-#G{ zWzl@Zz%%KHG5W8)+@h6(!B8Qppo5Vc=ZFx(8j=ovwvf|lvIBI;>2-;VDzlPW%+;g1 zlhx2LG>jb7?j(vBB=Oy;gI~c=hkre3_o`zAScfIbttAzgnj}S5mP*1QC3yGVVB@SM zvw`;NWIe8;vQH`ks@6tdNsq(uvJO7EpZCxn0`O7qHO8~T*CR6YPe@z z)D791JGaI`HT9R zMZ6YI^9w=1O!@hN3yQj;r*=BCGX6ox99StfMB996H2+2Azzhx*kWE8tfcPB>$!UfQ z$RF$UJkT;yV`vgl-)??Nz$zVKL8T)j#FolK6UmYc9uJ2kL|6JnC}6w*hR(bW(oJym zYP%0JoTxA}&%A$5RY*qWE4O^2Luy{3lG*al_VF6g%JGtH&ZV5FhV)Grzb15 zGcXxBR80fV<1C)yUYZjaNiQFbP3>2^a8{=2g+K1%06455BUZMNU4 zZN4`7@fumXhRxy{dk|qDiBEwj+Cx?v>jRGVm8Ogu%R;LS4aVz1=Sqt*xuPR6gOpZ# z<>9x9rGYxLwDXOHamW}LJ#fA(Z6wh(QHFsdOS~Evd*R;^qf4{r#r2Vu=Xp#TCE6FG z2IaV1VJ{0ooo%5xYGG-=bZ#`P%f(iQ%`_NJ&MF328hZ&oU#U^uZnVdAmoPeA z0Hf-m#C)Hk*3xv6Rv_6OL7+Tw;Xtx0)`5L_xnmPCO0&(}Nl{qZ5w0Gc+DmPf!!;ao zXo;+>vUy8+-+;(&Ae)I`m)!xK=g{CgbDuvV>B|`Dtem~R=iZ)LTib{hM^7?*buYCr z4mtJz&B03p2Ua4fZFhxSR@HDqo@&jyfj6x7d)rc6CMvVbN-S8E`wSy1$UkWyblJpU zcMig@`Sq!dd}&zAdCd}O0>$+{QeuY9pux72<3coHu`Q2G>b2j%r75}~NJo1))59#D zp!C-V;Ag=VP!H_T%bUB>7o(&@&JpY4tn~l&xZR`i74Z?TJGC&Gn?EbBOe{X1I#E*d zNT~=LO*`v>w3PH5rWOP9bD(Dpz>J<~9+%25L;ZeLy8h+C5*{1=B*u!xz$>KejI z-8|X-)dM=8Q~$}h6^*Ch#>?*pHl%n9>7xKs!C(8!!>_HyE``IA`Q^#!SOz8EcT<=k zjRhygQz%?{1M74}{fAmOJsS0tRyxJEhtwSz(Wgw;a%pHl zuP(hExllP)Xi_zW%YQ=~Xs5qS|&4RSGFnYmp47<3A7YY9mNZmGJXw1S!Vga9;vI zF!sW|4Pho@wwmhdWZk)BD>M_6++AgWIyZAfj`^leI9q15uvHFjU2Dfl2O9b+=-(#k zUU?{(IuSOp$*YtSV~9!efO$Eq{mN;_No3T$NG&F99HaroQla$e*3}rS;Bp|(rLLb>49^7`+TYrS=f9Sj z)EWzJg{GKF$tXaueN|Q)pB=u5L#iJh3ckN917#FIRtl*QtJiLy&$>I`T_`I6P7z9G zO^AC$Xpkp2OPNW=!P2To8(R>30NNS!n=t?vZQK%2=qXTmB4$52GeZ<3L!e}upKi`H zDQi{wH^ovHXrKwM<0aRw%M{mCK?U&vSXt`tJVbJ+?;tML-PQ#T-XI zVI`8%5OaM^V*UGZ3iH!c467$0eFY8VB0YR!CN9tg>v3E5`xb zbBCkEu>VfR4y*Ng)rKLhQN{saVW~H}RPSUjxG>2HV+V6YiW<@p}VnKxzNis!d_p2*dGlUEav4xMjqP;H*i%)IHZU8)V}bKX4X zRJ4}6u_1>9lN;e=Kc9SRpVT@RY$3Cv45-&ifOk;%$|q=1lnQ`=kx6Fe0zj{i(uMOE z)xy}g!je2N^N^Udnk^eo7Mgc1aPgR~KIa598YVaAX9t9vVjIz@)K5QHeVbt@ba?Wo zYh?!{-xUol5(JspwD8P)32JxtsN|tw~JR)K6Xdu^OMI#(N*UR2t zw?vQgO9%(-seRYv|DFJFa_w z06Y+}bl_dQ$Ga%xTpL)m%81K~{kO#94(G^8ExBU~itJ454nU>{P?4d|drx8wV50|D zDaf)Hg>#o#8|xOifz0AVtD-k2@Q0(AAR1po59^ZQh^hDbyXA`H#w zVF#V!$at&J99WeYauu0l_kZ#g#IStgx-#3hgKpqq12uPH3kvLgcepM-t=d=P_%#GOb)t5iQ4?hPA3!7h%!ZB_W~; zQz=Q&g=;rX@YjMt^@Ne!by&*A8E!!mdS1W`=`lKomTh(g<6=r(8cND~1j_`<#t528 zIEbD1fnuL4M@v$j_P2*;s6yA5X5wpv)up0TGBF5nRN#@y2%7SsvUF)+XmDI?D9}*4 z*2eF~rWM#>B!aKs>;SgMe=$a_f+e)JjSoAvke|ameX5LYVUY`~nKMw?6D-sfso_Ug zerylZ1|z%R*;f1m*|tMd^%iH^9)4LpQGJXL%|&@wADuC|BA!rY@)R3a`m+Ckics5o zdZoOqbPs^N5q{C^Ru`O~icl=mOwHEBbnJp^;?l?wWN6BVMEW;macOSP}=90P2rA>|3ili z-bt4p6x9qJby;?9v|Wzpt7JV*0-++rax7OXzbL+4RMn8w1t6R+MQzavZ$o~RiWjv{ zY_&Ram9lUfT{FAqEqOnWWpQQ_?^bGV zdzYl9OJ-xkQ9EZ#n`@VwVH2fL`T-#4hN{yOo3bbU4yQsXRS<58!EG6aJeYWwMJ%at zvLN`3G`*tvx4N@#RAF^ zj0>|Ce6z}n2J6^618(>V7g$Y{zi+3t^mGO*D3G#%t`dw5s1Gc(g-z3oM?k++)l+Vy-XqlumPCFYc)+FbT}eIf>NXB zPtNBn<=z-D=93S^=}$Djj_Bmb*krv|=28m?nS;A4K=jvSs9Hz^Xr;PK{9i2d8KCrY zLXi_M1)KLGWiNgaM4+SDsp9~pR9}n=nA%0zXoDy*fwk>6g@O8X6Q~gggbq2TULJ|| z{X2a*QA@ruK<;B^HQ;1dneaS;`HeWcp>xKC9UQ_B09-62UfX?{J6+m?*B$#5C~pB5 z#1Em=YJ&_ZJ=TQL0R4v4QHl7&#c*(KV834vi?5Ef5ukt9>2#vmY1>57-bGe*T1KrL zyS#iZ83v4WhAIvWLbPc-1%SFP2-td;uw}{_2l(6aZv_`1e+i{JO!Lv9svs}&Pts4R zgX8(`U3B3JEkp}z3%P@_?L*EC;^Y?ya29(Ro-UG!EP<{sOEETM8b2)cXbBKaBDI}l zcdDB!lA0S8Y+h4H>t;)jDjn_r{0(rk&Lg2A7Swfs>ch)x^Nr;pO5-=VL6vYzi!3xe zLYSlkiM0n$TtAynl)(MHcawUbyV1*U&38Hl6SfJX*6Q5qgPghhp7nqJfYCOOIWg;A zY*F{A=l*)h<;{=~A$Ibjq=(ue0&jyoYj_ykD|Yy}!dOSDfvdAWxlu%G+BJ`L=cHBA zeI~x{Lo?f+7yQy7LHmx&H|wIDQ+|49`&&&nF}JZsAld~db&ows#1CS0!(7P_cOsM1 zq88F)v^DD$u!G)tA?wJ^sqHv7Rm5so!cpcgr^4NYB;HVKk94LxN`4Bu9ji6y=Ma53 zb89J1GQxmAqc$8rKsRPGwwXbeUY-rG6Q5&5s^EnA0HE4U5hvGT)RD#`#={@Em;0f{ zou;ktlj_I`AvDv^K9wB6x@in z4ie=LaA_ln$jQZaCV=Q^%yk|y&ft-#ppdi?W|5)@)o$zCmV5zD77K2-{E*-7A~ZNc zWcbR@PL%%ArAWu3N%W(6vM&Bwny##X^m{cPlWuQUAQka*j#R1xryvx+0M-7fa$q^8 zS?WaSP6&Bql!b>Nv@%erZD$SsF zD!3f*>VN|JT%DNYFrdnq#v%=$Y>~eTO#4H)9%6o86aS!P%rfC#wPR|4XzSEeO@gS$ zJ2LgKQ-E$P*o^>vHyjG|L2>ZyN}*yTx2iJh>{D=X6IvVjy0$vSf=z_Qq!DJP(8GwW z)M*DCW5T{YRsN(UbNOOn&G_CI6(tM#2HWxIh0_T2U2~7}TvW#~tBjtn5;^pz}gb+es+2H1X&LKfID} z2PCQ4$;rSwGrr2{N7nLGO2UV&BiF6{S|Uiy>Kn3i+B(C+-{_{EMbkxgadqxu=Hqh$ zNeuy-3QwPt5>|!u>dEk(BQCe@i)mPm+KM~=USGZo+TC%NU&U{d;0i9?EwXAPhV?lV zGPE|4pj4Mgb42iK1rfS!oyd>H(`AQZh`Lcw<$9Oo6~Z49B!(R~bGOKkdqrRogt7@~ zCQE+xtdvja>t?MDK)iK4JzqVO{dT-^4yQ4rICb$GIo@LFu&}wrg%n%XY@j|s?5g(} z-k7fR?zfpcKjNYu`_B{iF|(0uWvTT-)`QBJm!y?i2=)b>*Ldibv)bE1C#is+?5^LZ zIK2Y!yiB7p^c%SrdC@P(NTrA|7aJ2$%15Q@j^kUlojmt`_KS*M;PGnjlvzy_UWw0C z6uEo1XC0K3$2X2wSGfdB;>5gP&q+R?@Hj=TEApp7&XRMyE!DSYQK-0=8WJK73G;4> zn;XaEf7_@if-Of2Vbs9tyKP0V7lPa$-NiY_(vAJXc^pb=dY^?yp+TJ4+c9#^3Nss^^yN8owj$-lXouFba_79Q{tHHA}B!--yyFH~XshOS7dC}9Nxhzd}8#!0e zYBwqZIJV9QU-r&zX~84Gz>hgb?dk~%2m^D%^|*f5CryOht7^g%eA?i=0i){id4J|2^7il4TG~&=G-j z@DYXqBofTcaXcrA_wRYFhF+06pa?fd-O3#4%iNmYH)>`0ar53eh_zj~rCVPse(_8d z&)9$8i%wO=wi1(5{f+ihv{*dkE5jN$fHI;)_;N@F1%|HcW}t1_Gg9g)E#u{_LVFG8 z=fj4z=0aO<)i`dG0x9yae_rs;Y5O6@<^;y#Q=N8~ zc*^8roNt4+NtAQ+@qh@P7k~mL`4$6uAXANJTT5mbml^Jp37&^yO%S`5lOQ&0;>r0U zo0A17*Z#td(Itv&sZpVjGA5T8~Ecm1$yl0@RD$sMC_hh z!(;2d5d`#2`%8ecZv#qC;kOWiKA?&H7R`;2>FNSF0d|)U z>4^#D)>bq9QZb?wuu?g(A(O4Tl1wE8qLX%)s^#q0F*NB)kJf}0Kk|Z@=KyGtQ3+)yP3x3nbG7f%P3V~4O{PhBBn0XJchHQsH z1%Rj|jqhAi^ObsrgUs|MdW6b+t=VjhYZfejd;2=omczK#${J^Vmqg^rAhli**#z#wu8bKMArk-JYT(;c9%feQ}@SzrC)`v>rHPef1<=gtsi4N!mEFxK&!}Ev{jM2V%I$lL@qte*FwmIS%;2Z1y)56R9~QfQ!tD%ow0f z%HYgT*q9x7#Y&%5^9I&(3Zzb>82p}kt$1!9`K}xQkVv67%pe%~vaUg@hgor%e2U0q zRRif<3pzzY;thbCY?n;>sSIJ^J!NOcgAkZOY*_M#BxN0|%7>Lw>*Gi!k!KkNumMa; z{@S&4@#7g)eeW|=Sc5!7=*`Gx#$ieQYgB9!-2(~_hLnkMe&_!6w3$iTBGmMoT-Y~> z-3c#n01qC}>{;D$6Y*LdKV`#_6IT*g#J?Q^S z$E_Yn5^c!1fIFScx#X8UU;Y~6Y^;&`bmBgOc2F^y{}t%E-hCeb7QCNgdE-K5Fqr2F270P#eF9G9_z)QgT*2RR$mopp3 zr#Q_6msf=UK5Sx}QmpsQT)pxC-@}I7oKPk?Jt^u#dy|h8+wv#oQnzRTCe?v*-x!2RGC_n&*cFGKx}ywja|a#LrxGDWnm zDk|N=sV$f=_LjP4zsho+iKA$R06yyx^AD2bl4vf@Y4kGy@WkOBJ3hD(y``RaJrjgc zHvOFlD`!Mj_Ua=TXt%nG!<y#+1zBriMjc^V3F7$D%?RKftPd6A{CtnSU5piTHmr}$R*%~)LKfun< zs2%Znh#|J0En1A(GB$xbi5wt1){_3BIO2Cm&S<7M?0F8h(jkvR%ba@V5iz2&SLwE! zOK@zC$xQg_`kb$W+>xVW;wO>x7q|l4#lk9vCE3B&*H)xKI21kuk7Mv(@}g&+)|`}% zXnrMajG*`YR?#g`+FP@|l^3fRfSa2wNG4#=m@f#Bg}n834h9&po5PU*ot)@-y-%VU zww{sN`;_OtP=S3>VZxt)4A34rO6?CE){FKHj1vefcD%t{1mUz1fg z^A?rOtou}J78|f53>v!*wjakGxL##Qk<+6%nvV0L2ZzQC>J9zH*Xlmzc-bVmYwYDR zYlageDQr#3C1Ejgh8(F{MHr#!w`EVOv0-k$l$*h9_*Y!B?iZjRG<&sYjE9~Miz|(tOYF&7edC0yX6Ps){{T#J&I=Lu#k0FO{}&i zpU=2r6LsaDYr#2Q(Dv~mPE|RfNm)W1^KKqJ%^mdH6(RR0vyMBhzWtEOIL?Bv5$61> zaDg8YpVJ(@rbMq}w?BNQ5_^MixbbpQKcpAbD-U*qd^bjECcnLv0(Okz+%j^aQs~w? zyI|(3QFsl9LZPato41u~4 zL`!?U9I;x5;7_aePHiX%q)lDxDDxtZH)uzD=y_uOE~2Quwal42&W%E^*#-1(e3NBP zI8VLntq1Vu>d(55-l}9C(KldoD&kc$C;fjEukh;PV$d&2_kVb!!^uJinCe)zWAu(Ea(Hwst>a?Cua)DICwnHpqRm&D*;2 zXQ&*XZkpmlmQvWqOTfRka-L(&-ER;|A!)?J%E3@(kGQ!a?s@gG-UcWEwb_v)w_G%*{(O=gF zL?4?d8yR^ixrm5xOLkWv+rzoRYSWSj=B`IUQETTd@^^N^t{u9jFWoa)osGgYindPh zk%fLvDa%=||DzZqeRE8svzN$#lFDMo($%DtVM7apPYl+?{c5vH3t=C>P1XM)B&=5? zGJSpgx>Tn%2IKqJ94f-f?eIv`pJ+rkZMC`Rj%o+Ikp%=TiyYE6kumkK+fpa@mXgycD#j73Hil|Zqk(Wbcqs^Ba23Ek~k!PD6XnQ3c>O>Abn z+zuY4B*iwrBBc4&#PyejA^)f)-krr*a-dwilD?`#gq3&@r3Q68`(II~YiCS1R1RNR z@ieMFxH(#>auF)k7!=$%N|i=ZHWKz9IlKfAw#5qMf_uabIry*eD`4oj-(uz3hRTBR z;xQ&kY({#5FqZPr7cHw23wsFt^_)2Po(7&?!>6aUZdo_rx}8*{Jy${oR2LjmD*m4SjKC~jvS1LYb@Ez_c^e!`Z2 zMaF_V{JRvedo>o)>Psj!ruBu{7$AO$zUIcn#{02<-q6VVYOl} zEX=4==-cJ1*F2H*bMdB^0Nvv-QaAbG6U{BxgTK~`NnT4DR9sH~=|Y_1Mox)XX+I7W z7*b)i7By>YjXwtByQwJ*}u{|73;0>8@7=6OMpRIh-1e% zL|w6{6rUr~+yaCZmLxlONB3_V#a{!MssgF#er^0lJ%uWde;Bo*d8;%SvNZPWny3(M z!=N-{nu1RK?gmjbsK4as&Yp3Xo}ivB^i6*D9cb?-vAM{_c8aQM_EkOwz-h+jC1BTN z;a-QiWxqQ+gLt9F>x#4x9nlNb$b`sBiNRdc7pYB!_$2IIAc_Upwj39sG+ifxL9}ZbSYw_q#wl^3Fn1h0+4ATc6F~cA^A1_0wwixH;JCp)|*UxS)q`ciwz zEi{MA?8cf|r>UoLOt0dxb(n5Eo^##fKMPB+f)CL(pSWHa7Og?pRy&^Vdb@mS{9YjLO2eoLl;mzjbWWdEt# z;}ca=lQK_)IqaNstY#IfR1GB0w1ADoh<#Vyd6=7U}GRz0C z9DwTI2+kwT6r0GHU+BKdR|``Iq>wbu1YNp&>?{MtpiG@=Vo;v{XoLS1{r|fE8~I=J ze-nUdx*M#aM(Gu{>H0cG(`{*f@dyYaKMI&#wF@9!W6QL!XRqVR9|3Ldl zIY63~MMz-T-FDSReESzF8YdrDzq?i9&PO_8WEIpZoK<@5keJKfZtb{`$Q={BvEd_w~A7ujlLeI$UqE zXR-l62j_wH02CAfAX5GV$UXwP8{;DO9t9KtWdHzh@}bXwmRsb3ox6a@R{4m6>;*st zloS;el@yiakILMysI`kE|8YRaf||cuPq^7f{qyP|{V9-3Q*w(3H`Gxw zz=?9LuDruBr}EPSpO$Rtg`D#l-{oVKUkT>JGk%`)LnUYacj&~S)i1}SuX5%WZZei` zm_EI*y(N}AlYp{#4a7_GV#Cqy)L-3^i(EnZN@~?*6|GwkDTd4APxg1O-UC>X% zv-FeGF5P}#ge_H-?+5=jG-UQKhALkEOIK>!oM$MPF<(`zaz(b@!yQb`ujroKdSZ2cf|kbFy#NLoquJu z+`oh3AMEiDR{Ote=U)!}pWpTG7XJOO7XJ+t|6sL$Solwd{CCR#CujHv0RJ7W{{*Ln z?f*vBe;_rVzi;^uocT|l^$)c3ubl1w?0*$6GUoh)GqqTM{P^{0zb}<7Rn>0Fidt^H z1&3ZT%#Bpd4XaGLExWDeVv32FL|ys%adv<8@82J+a(S{mEa=Gj17~bj?AvUTvUafY z&3>yy)QMv+$R!(}O$5e?or}VRgV6)=k6d-1-aPMnc-cD3lam*J`Lw~*?5M|KnhP=; zI?%c9)AipDegh}3ykL|Omer*{@Tr~q`3mDesU=tjT#uaiv_%FyvXnaiB3a0#thq6B z-Fo(QDr)-5B(o&qE652MK0a6eIK31KSi~8f1?-| ziJ{rj9kI_+=x=71$bg=lCW~J_t}2&$wMnE0o(rVu!j_^C$xFT2q14$G$Ez(TXVheX z<|c_WT-YrG{(SL)`4`gSk-GgwP&s@?)~!nYy#>+{Jc=G zscRtdmKh>u`C*uk46ri$vF(3O1YI(yCcSvPnq_!QM+Wqtyeb2H9L9#FC;!yPyj+~q zp{L|h@8n9HUjJw70H^TzBUipXrj3%UUHpBDlH)n<1DU-ybmf<|Z(jaTG(y99e(k(I zhNY*3l%kNymCT=OD~KPRCO#Eik?;GLS=JO+T?X9aKBp~Q)%NvM5vAqve-33c`{IYD z-_B^ujWlOL;gdgPA|{5XLgmO{)88J`cis>U{qim8>7SYmFBzqz$!*_a`K(;LTRu0h zWrv?y9z@BNj9s|uz6@ydl|U&DpQ7Xfwaf`r`K?TQRF1d2>PhSQw+fP;)=opS<}tPB zp`(vn*5XBlk#h5-&WyiqVo7u#%78h6FygLx6Zp(JTxpg8Qx0lAs}l}9=edA>9F^@9 zF@G9H{O1P|CtmpGFn^cti&8$=CIhAyJD-U%w!N1m2Tpfo`p4M87rB(A^OH@eCr$^x zEhu}?6ka@9Ed9Os1!U0=bvh<{1&D!mzrG^-}yj}XZ9d!Lhu)D5XZ7L zDI;>hwU<7lh@)43`6~UZs$%9;g{XaS*wj%593F)F-2PJ`l9xJi`^|eGJ52lXSnstR z&>yd^n_sOV1MGib7RyQh=q3Y>?2t+vK9O=#;$Od?JJe4TGM9PokO713ITCV9Q{}Yz zygq-;`TaU-PM?1FCgo0cGdE{i)UwxW8aC&_-(x)A-+~QBe8R&AZW>VfpHW)yGr@9b z%)ghEw0B-v{CbsVT3VRp`U z%9WPUx2V@_$t9(Mx}VsvpT|a&liJRlnH$>Qm+WTKPhWg>2k~H$MDxI$)(kQLJslMv3(StDM>#+kW7cm#Xb20a;&L(wK?E; z4mhX1dvS%5R5;oAlP`4s5H_{-uy*LR|IPUq!wB!8rQtC$?uk|;2ULa!yhKv-~Z8e@Wp8P56t{HQVI$&KS?V8ECV7agU=4ikLB#(1*xDAvmw`P9erhFVVuV@w2`5$gldF_~- z?ta2C{K>K(?&6CE6_7a!4UrJwI7L66Tl z*-r>m#B=6%_L6>_TwQp;eR{Witqk}PapX=Um{&=~WJ`qHiH4JM?wtQqVLDzveLwf` zwaB?y)DJ&#{I3K1KsbG#(l2)psXQn5Gr__;#{Y@eUyqm;*5en!`M7Zdb0 z+_Wg4(3GE=_2;%ppVfZ~#i`#p=_do;22P8$4SoWM}!9y>E;lM==Yff`sf}o>icK8YkheM8)V4Wv!L|SobriXiIgJ_pF|Xo zv6dXUZfqaMl&5FNmoNPq+W^RbKv&B6{O+IUcQ+ZkWg-Kf&i%pSuLl|klqYdqY02wr z9Lds$QWrT)xkmSrz{cGYxD1f)J_eN(s!4CXzE(NykTrX}Yp1%?9*{U{#($i%`t7v{ zsC27#&z%D=_$al5bDM8-6*{`hfJ@Nmqyl7;=cExNzP-hLUUn%{DbB{BWExuJY>mu`uT-;~O;XI+C=pcysca@+ivRtZ1)b9GzNFH--* zo5{>vX&@b*j ztg^!@UJL&iMeb8x!!t0bJc3tIK*dIfg4#c#nks5E%RlEaA2r#z+X{ABGzXRlJ@Vno z(xctExz=mn#t$p3wYZQdjC^ai0tZFti_`Nj;S{tD8$d5c|^Omv)L%n~_sohpstwCGy zn4Ro@zYVp}*E|2ts90n`JFlUg6RLqFdPXLa?J5EuZ{Nek(p7N3ZWgj14RgGr6UVAe zeTz$1)FnWyyfMpTe)IYKRS>N5OGv~F*svjKi0j^q&Cjom-sOT+-xPRqO6}WvakQqt zUQp1CuCR)Co^xiX%?EuO`#7$nTjXB5=DD*S`J}7O?4moRdstg&f=k=U;t}=W2T_}B zbcKUe%LCs-B@Zq;pV%&e&#rB&r;54aGBwFo%8TVs23ykJBvs6~B^G#1RZhUhN%cqM z^wk9=LU$z|FF(%@%sRRta<0*4Ix0{P&3JoFx|=6`!yP~PLHmph5H`Fo7jI?^KtCT& zx;|qU`Z(cS&bf&4*GS2N6x8Kw6A_c>_qU7>4LMhj-RE#aRZI;KAYqnCis8`;AKjV- z>mLM0dA0>y*|nfMWCB7)BG|>r3Ibj6p_}g-KBm+w+4J2IDFQO-t*FXr&sene}+B3Mvok0&Y|uTdG@L$LC||%K%aLv7*s9Mp`>CMXPdTmTP=O;`>R3Fn}$2a!JD?&u$oR~2Mo;G zyO}lY(mQ}!7_Bj6R-ODSSwPT~y1QZ58+{upwdj8QnLfzcXfSA=eiv+H!r4k-oW19r zPk5DJ1jkz!+_|J#;#IvUBDG-( zy~^MWQc{odY$seqsPtu$&_*K0%^4GGFGdz;!CKay%tqgQxbQwQXB)XtTM zA->ySNA6@A`l+bA9^qBi53*C3Hg)cDtFd+)1un0*stJX&C*D}>yq5qQh<+!L0qS$_CV zN{;tN*cW}SNt;J*UU9JtzCnweskc}|Q2!WE3$Nc=R96+YdGKAtH>6SYDrCd0#-n3n zPgtr0KC?KbAtrhuFZYnIwkC;Wb9}&`vr>)FoDjI6#^=Fy@vv>cY89J9P2VzwqNfQO zN#o0}gq%t?ZL+d-{LOIxau`Exq`RTp@X)G_*%@BwOVQ&_m!+GByO%~kcyKo<;pHOK z>dym`)WxG+i^uj3xFE92U?*fiQ26AdiR*CGg8LG;$&{(xh2K0!e1-*KU0E`q%!TRl zXlgmifmsXwx~P4w-|Rlf*0~Ao2%r6}Qt}{YSojpWSO#!+{qFLtP6jB*fY_@O+&2;zRvG3uFn z51kr~Y8DZbbSkUB_SFT{T34m+q*5*BHeamw9+T)3Ug*gDli`}AQ)WSrPWGD5M7UoZ zx6E$Ld8yA`|Fq zc7bV#xx--bj zz*)e$MtI4@iy7zwyDj^~q6UVgT}Wb1P2Kz+O%CdIQ2zEPJg zZKnrNJ>`<7FXDiSm|L5>p`^qKuc>-o`4jf-)$)46={V+i!MDRM2e3i*Z&&8c-O*&U zd7Bcor$8UGSV3sQ;`P`4eaubQKVg~Lm95$kPf<-V1i@BvI_Wlg{)u-{9N)l{ z5*P{sLnm}5lng7VdY@PwzHFhHL9}bh9&cr8_nEy)96u)d>00Y`4GAJ3i;#-)fvm#{ zk|OG}(|vchPvyMgZ?5Lg@{mSaB`Y-JhcWqMF4TVOeG{Ej!WhEKTMfq*2J}JjJr| zHinKy_cmAQD;62P@l;JDY^HV~&SoQh>HaiA?mh{42k6o#D0CsBs(AYuCGf_IO>P#X z3QH4)ec^iZpoTU69(h&M9t?n!g0R~sy0^(V!SJ-@_wJ*^HgR??+atLC%$n}BCVEaz z_PNtxa*oN22rw&ae0rrqMfJ@ho|1U{H~+2C`CR=Q=2#ey*;$xgxaN~uiE`gbzGzIVf&ZDJTc>6fv$H+&9WE$k;#|NW%5_*P4~^Ug)LmbI~H7-Esz1fjX+;+k!CyZ7|WPF6e5rT8ec}W zzi&W=96tyD#p}#jwR@gWX~eu65CPcNO8gc1{_MnL<>X zY_c>pD{pbtn6UV6AFZd>Nrh#Is!dJu6Mepr?4DWJtxJq^UGX-$#OeSvJ5M7Nb2T>! zd^Y%$$+HhN3M;W6Y=j^9roOAv^T@RPb89+d1wm$4*Ah3$lU29VRUP;*?8G?Dz*Dfq zH`=HtOa)Ab;v0I2=&I#KxXP6rh$VUl7Vjv1nX|X|zBf_r!*v1QQ zj+SdXo9SiJ&PNE#IT#fpJpE0Mv#*9db1^W+Lz}O|9W~@;pDoxua^g!h@{-NM2TKo` z92G}5!X1d0CZs`U3y>+{<^H@9k}L1${g^l87K#E1UGY4KZ?u7pFUs?HCpp-VCkh z!;yI_Bjbl7`{BPL>~>JcS|*Pkqx=x z>hXlec8_lraIen}KF-9((Jk_<)$eqf_1#}g0+Z{WGMA(zx`65S2YSWS1u0!FC)yy&6 zOb&p?%~z|nLdsB1wRXduu&&=lHpl;(>*u`XNcZ?k-~U6de@C9{`@Sk%d{GAQTV{pz z0!QfJCkaN9dn?R*wohKEo?G^OWb1MgjHxtKwLGd?xi!9=XRldH1V{7+C=!ZxM+~v) zEWHUHb+iv`Kr5pqyC604FLY|Rd3iCOe1VTRjZ=NIxc8%TOCVPmpuy(jU>bEr^7vOC zj`Swf(zOBXR;u7t;b<=65#cv;h6S#eEkkI?>YD;C7rnnj^OC%X!>%fPh1|zdL_3Wm zD^hJc)3E|?IbqpB7T9)WXIYcS*2)p8^SNZjub!b6f!?=L6*7nXSz&D4Q3o!e7-4zI zVa&)O4n?TN+2>EZeE}hyE!Zi-@Aq);MKTPncCGoUml%iCd+P6Lk}xqnKF+$xZhFtn zzPJf|I^%uUIYDHp>8&KBcd~!d@e^`*WYROtq(*$cjupnLCSy7t5<_s!p0;?_;pWSvSIMr}2J`_z%kzDaSlmY^qQdDRiZIXkhkkxR!xe z#pndb5S7&A=)U}Gz1y~Krz=%<+dLG)UNlB@zPVE|<27{pC!2rxgU!!g`3swyh^P(n zsvRiNil#KbV%-Ho4 zGuYU&9vu^7d1*_y0(!Xrwv$t1Pjuu&Y)M(mLM*5`{8(M_PTa@ zJ9mi@-JD|?;AIN|SUKN78(Cbb7)~^Zb|NNRkDq6^Zd)q*j)W-n&&!g&lgiUDF7wk+rMc zQzuB&lYWhtdh5<#kF9y)vCgwX>zHr z#wJ1;DvVykH>gl3)jDs{w&x83iH66tK@do`*HACly%Ogq&n$-{_e&S5N45|$&@nDZ zLJAX;8f8i2joinAOCo$DFK)_Dw}=?*^}iIBUk;=5wv#@1-XsK@AK?!3pH^+#te=&* z2O4yBZSc&6vDSQA9Ji`TVQV1wWGA8kZhrErRfe_$3;4 z%5-tbimR!n#IxAZ# z`o6x+94Yl$TDdF{p_gkIlsB1a{o&%HZZl6yH&|VXZ{UH0R|RswoW$(fCj_%Bn6JpC zIKS1yykeqM4XL=@y#FDYZ)rmBk=$N~fvug@V)bCx*vf#6fDu<5KSDfy*PH#t;&|{z zCjD3h7UaxF+(m0%VvFp;Z?DS5zr>1WrgvFa(97$wJaUY^eG_8Q9LCY*;-UpoY^WV%kT+C^K;%>b_F6Yk(O?9I`~xv zz`Te_B1eC^<8onj_lbSgmDP6D_oP|tLo^;V7~}~OBQvAz;cNWW(dC+Q+6^!(Q5YQs z>+>!JWt;UU&Jyy1Hv&!OTP7n~_nI{;X8Y_o6q}Qs{0?hkLk!7qRC0WpvK-`XwjtR# zm0ecgS4_Tj`eQr9r>rPt_edvgcLe8mo}*Ue3> zG63|WG4uJ{%#ZG5_@CX$f}HdGfa$+BW>$Cj%>K@h{Qj553~IDa1^_Z3wrL_`N8psY z45)uDo@t`lRl**CHPqm)kgXT*dKV$U0&M z5P=QwjUkuX<=yF;9Pc+ZgyPp^8dR-m(PiWESM0wJtd(SW)ntPMNN>ryQ; z_4Ylf#-yx+X0v*tT*GdYkqQ2{uL_yNyj-jEm1xa)*!OW{f&qa_YJTJw`BJwgZbc!O zaNhETz=IX+kGqzU(JE>#wX}I)<%u`97%zY|yxk7(9tqmcK9iH1nU`gbSg;A__^?wg zbY=8|UwvlRh@+m?_A_VUNl1H>7kDTCW#b~wCC_GG>_bN+!(NqN+@klJhlgrjF@Ig) zgF(+zqN=A=!2~B{+{40K-hDROcRP?tW2+C9idU(nm*4ihfpa|0u@H**-)qte7{tpb z?bj;O3O7xJqBLG?X6&& z({Sg;J{mHLJX~84@;18r$<|XsbL9wjTuDkrN2INAi3F*P*_iB$IF^I=XR+LzHb$S= zinGqJJ_23n=MRQk+<6hBg=nmGFvRY=N$%>cS+El4+)swXkCfdx%1iN&rE{t=@arEq z)rfQE>}pxIE^TcHY*OlhdzWt+vhz_~i2@^xWoGNhYg~Z7?%0VqZ4|uKc91FJT%?v2 zlbX*h8;&VjzTn#;*JF#%PFILzK)7+s2C-0FrzF`b170kDKAzcuCwQU;Uo9uZDK~7X1F>DL zE`v~ggv=8)t9nI|?FyE*l8{wt4!5eV8^f?6`FJ?2`U9I~9nmY|RcV-98I?#hd^t#+ zlErmv2N`Q1rfO)-txoXPX);Zhybp#pa*p5)M~*F#Cpji<g9yX*TcXw47p z5~5GUox5=H<62$>8YgjIbob_`q)OM z3gT~)TzOO>tXR=)qdv?+lE6~IS)NkGLgYoBuZguvd)dy#ZNjWIdNH`$S}*r-MNbb| zMn4KGTmO_q!l}3Rq-s)!N*gzClUIAkkrgRLhg>dgS#GXZxk?83^{`U*e;Y^; zF@24$GIKQoc6TxhZUx-UMkeJ|WAb_0{-s1S=E=wjXb`<-*YdQ!%pqjHq2FWcv1$8? zrF(oT0@d~tZ){YYPpYznN31stA?m$l^b#AHuW40Oo3Lin^fFRv)iRE!F%-$ z7uUk@?v`6vNZfr0F4wj*Bk*(gg&XE=NDu5%taG}Wd&Ra$_I0k`3C7c6eMR873ku@k z&#r#Z{0oZXUP1jW86&`Ir`RPVBCK$A&%~nU_CkV(1PpOZJ5;SmXeLx?T-vqW^Q`@X z3#MAN*BBod%GMETNBnEz%xvBg6^156$S1+uaBJ2w1Y{X-uIq$=48KsWMjZA(<1VZ) z-Ff8g&6(wA#VV;N_Wj`58DY+w_@BAUo;Eo|=WmnZtOxJhm9qH2fx{SqNl|IqEsD4lc1}R#8uk zCJYlbl42*KH2NI1ignu6IO%Dt9=TS6v7F@VVj-5-zMz{D;b!ATo+Tlf3e4hz<|Ew< z+PL6>W?3b2-=h;C3?HOZ;zaIng+IE{-CTiA0#FOroV##(8!p2bMJOv!9SFGi>{S93 zvSoo%fH?Z|U2`}1$=cmZdKAp7M!{Kxi+=dvCl;%7CCF2od}(L*x^3=4L9D6o>=s2l zFL(_IwLq zzj{)=4%0ywjEhFF`FZ!%hP!E1rcbaU=I}0~lVxS#otVfkXT8Zid%bW69w)y7C*-j_ zEr7CA50;h2x|(O=Xey1zNT|6319NG%4ZzJX57g1Zg>q){g(Q<>p zcQ;L)6A`U`a4S~zS|Nk3T%Gk$N#RbZm3N2D*1VGz(o%VZYX9gs<|rmDKU1wYs>E%> z7K~tCR!DG1q?@`QzIA0&esm5SZntQjty_G0I`z|P2y3=? zc<%bB{?F^9^U(jjK3d&@n(bsr?#qBD+>0*%lag!Qs|`o>ev|?H4jJJ1Vcb|ve2hXw zMXpAjlmY9)w@g;qX%F`jAJ9_S)uu>&&uprlFWI6amYGtxehH7I#Ki}Pe~LoK&>bJr zS1NdAmNo0?))aWqYwtR{c7x15j3(VEeo3^)G z;OVn)d>F)0>cwm3o^|#}$I=YtwOYD|IuEyxsV$fZ{*9SD)%vg`&?Hwal&BLDf#sFA zD79e`AXS9UdCTtzJMWY}o+8#gI=4iNS+mP@e<>n`C)3!T(E8Rl8I%KyV71pS-k*;hoYN-zDc;{32WteQY<4ir* zgGu#2y|B3ymq}DlFKcY%JY1K@8kuW71s0Oe>V26JD!-?dOYHJ1uWD{CsS18 zDG)Nuh?znz*1=VP_7^hq)S=;_2<1T`!xywQAzp-3_gcagFdWlNcq604I+pioKVFtr za(Q)tqOWH%FGZ){3BkuWL?AJk-wq1UMwnD3n0vDk>L8M480e%`N~p*u!5=p!m1=_Ywe6U5oxvfYY($MM4utRaY-K-{JZNT)w{8XHhy_yqEX%mZf&n|*j9d!hJR-Ku!;qryF`HA;gS&LafoaR zx5(z8A-09)0dy<%#(p#X+qbl9eTZ%wl)Q)uMBPy-!~vtMLpdXd?%_;`NuZsFl5{2F zv~O90J%jcOOr#WGK{qj#d~(KEKXcgAsCk9tB#JyUj-gnEV=fzF~2n-qAjdFe&uGv;rUO0`J3yuy!egi-z#nckJRLK2K(Y z^ZViZ&+!5+mvGZ**v*c7Yl5cj_%Ie25XqUjjr(0*_j!I1HCN;hJ?3Hst`?+}T*Ax5 z7Q#7rC2Dj8L`2&maut1_N9PhU(1D`@vZdxhHZ?NK;$CP!l~dA1IVBZ*ijS88_vd@C?SE7>O@CB0#DA!0d}Z=Foxu37?<)SQd=IEE|1e4U zneS=;QPXJap!TkceO|lBJan(c=R3g!>W%hMp2(D-m4`mK<3x6|;=Y1#PN=fgFiMxf zCwLFr+{=%T#zmR`mNc1xwT6Lrfu@X+i>|=ixL9T6p}Zj>0~?c>BSw_^f?}r;{U8r! z0rtfmB%#QwtQ18db~O0L4)x-3NeLuaieWbD3KP9Q1v?6{$6A;pAz1w6?6+R=c(gyu zX4Xm0US;_M+HLY89j55yG_IEgA8aaS-WcW4LS(=qDu2l3D6)cxzQV&9IXd81_=E0V zrsTL=Wes5wEiZU<%XTCL5h)3dWH{;zy09jNNS&-c^Y7z#(Y^=YRpj$OOIKQ0zD&Bb z4(&ZL#z%+Dl1&|t!|L1IYZR1+iS(nLP6$(4Q;r<38?pJ>qur}&1ZG6H10O$bp!=ya>zfDI?bHgiQ!hf_o56Vl6 zbsP(%Mk(&1vIwKcqojV;;G90K=vXs-yP-Owq?_45|6q`53(~rD?+yr_=w$eLm zyk5la$gjv76ku^NzkpaT4@$B?ChM3Cr*$m#^^#9(if}HaX2nELF53G%eKwedb=QA` zP(J6p4N24KnBu#ei+#9gqg7PPR#aFr(Nzku3*1>cO)k|eL}Fam^YKPv@>gC;Nh0}P zzWyM)*tKntSxrmlC6|y@EREKKNpDKaiZ_A%N=^I~R*|ieW8$znDG3s=j>z=`lL+#N z9p%H5%PK`<0&?F5luvfDe`JNofSw*JVADCL?Gl|D`CcU=B%#oYs5gt~N8Ab4(Z4#% zk7HuIZh9M>!V2)+7D{Spy-&vBVO0JU$>6ktnyV|0;8DCUGlJ{QpiPlXX~}CD3aF7$ zUZZ-efNVzsM|%@9BkHJWdXd8_>f*WkeYxZ2_gV3f!@d8u5|#g>mJkCI19SPV;<#>i;7^!RG>$%YSpsJV0c?!M|Sg%r0+fMa>nI&w`H2 zfQhvFjGObR&mVW1Hym@mS#}-^fZha)mX{;mc(8)eo`qkc+*$p+<48R+WK9ah<{I8k z-vFmYNV6jZeaOO@`JXUOSXA9QylYjyt%yO4iI{l>rs=B~b!G&WEUj}IFI9g@pr*vY zglt1QhoeWMOf^d`F^h003SL0y!h110HXDOM?l3@A91^+>IMMc~G6LIkTW{#GJM&|0tPGIocTr-u%?{d+qKss~;#NvEYGzl$ONAu;Q*-5- zN%hZiZRpQ(%}ZXcRX6?h+of;N+gai9v7&ngZJ8%aEAGD2k&k`c_2m#Bg6e15tM(nw_kOvt49Cd`ucs+Gkes%57<(9s;UUkk|h zKr-MA9&y_Vanc>8nWHVJa)rOhDU&17BFo~6S9S}b%D^1j!T@<@lkJS)>m@D`7>lw> z7l==X}XihMujmbLT=;_L|R50m{p zGN0AdyZ=Esp_4KI6D$MRbm`IFS22GA=&THwq76CM ztPmglP_=@Xt~MTJZR?Rxs>M{k!5fCVlffDl#GyK>rOA{$<9}dn-iBf8H%Es$cnKck zd+sAu^We=P0}#tis}e|Qs@OvZ8NSvqkpzj0^iL(}h*I*exPXCOJ8Z5Inwk9chcxU= z2gHMheax~XO?5M@k$SkLXgxYZ9j3&lnjht6gsS^tSDb78z}ABYTEbRPT=|x34Ekei znfhMcB4)l)IRu72oY;6z{~I$9=~iuu7@QcP5tJjqDLRGm(x-H*l-SILzF37EuD6x` ztwyU9vPJ$LOg=ImM)b|!reHVI_i${(czqcVe<8_ok`$AEI&0z@Q!_H zI6vZkj`m86WO8L2+Hzwh5(}&PCXOc|8H))@<}<ICa=~t^KLD)1k(_e_sfcnz^9c{zmMD5!<2@Y^ybj#df1!w z;m*POS4Gl?^qLNZQ{Q^bEa5K33HoqGvv?Tmgd!As7g_J_8s-ym3MhzHhF2L!ScB(j zhjRuQMBmr988EMc4-99F76Ml7)#)j6kUPY|JAWdn3{2DWDz(TfyAEc;vOugZ5pUQdVGo{Hh)k;hSRWWmVEcKj z(|E4qS6i`$8-I;tZ$Hy_H9G!_M-Ks;wQSBNvxC5=RKy@O5dl4(echPaViLow}oFR!g8Si z3yKxES`!uu@SuP!P(z4td;}*49pdIyhGyx_x^vjPyewQ)S2`62koBkopl_q{_i>FA zNXi2q2)e7$G=dLr)!gIGF<_317lPW&kp?iOEQ>xz@i5x;Rd@@#Bc-EHG#+Kc)O&ZO z95ulA&0ni8Kv!|nAJSL4MKXu#N2AE?ez;9#gAuj$Y3CqXA=}KTAIQqikdU+Cr zQxNPvUX_G`02lmrVb67RJUy}7pC2@=mF{Zua=*G7F;MxE36#L1(@s9_g|!7J=6{Pc zZ2iXHMJDKtj|nvNjIvSJYTPe4yhK0-aq+|O2QjFTuDP5?ap{koxSb>eek8>= z|M8|MYfawW!zkKzIg>mVcFmqQmjMqv>nLY(WWWJ0c@PWB`2nE@FYVj|<5~67B-Bvp z@m|HBpRE7>qmd3c$349gXJY;soqujUPp35VsEA<=!y;rrEgIW8>~4-RbhR86L_VXw zLt^h&#v3Egdgn)yn$rnk&5$iL|5sE;Ux20g zXgb{@=jyk`lWe@MlX+Ceoswa+!!ijJVn!XH#0b!bKY^I-az46WLdye1!!LnGXKHShvYuci%ulT0LU7WLQGP0OZ}Pp z*W$pmpbX_tLwF3xt(8}$>UCYt(;4{O&?{rSc1vq#)HQ~?0V6+tp(R0a@2^JcHWvyV zhmi}nc(YBExR`3{=P&R5Z+xYjVTsGGr7`mrJq4;R85`| z&9|*#oS%8nm;dBJD0v<<@n_G_A|~|O+w0u-Fz{>L2sz+ZKj6xMYwsQ8$uoacR|b3y zO1l1$Hgr_4<>a<$D|)^3T<`0c@VDFM%d3NGlXEQ|wC#y3a@y&`F)qmHM-CC=B)DsS z6q<5fUEs|DA?yl4FB)wKYT(?9mMaB#0sK*bcpRBR+>ODAhgGza+l1`o5)Q*;BybHT zL|#W&Y2f8$tX@gIU00p_R>8#BoK49K&oki-q=0cs< z;hjT$%2*ZyZQo}Rrl$GwV%hlXa3oT>4duyoHx=AZ!MXug(?imO)?)xng2Ck!&UEyDMVa&|$w*9BD54*JkO6AvVyJ=! z7i3z1$CrT~MaC*&=AM8I+){Czg$<|=%4L|9EM>F&ExO!mRm}8qG^4Cl9M`cNTw$EH zK{ji{kx-2^|BNqDJ~-b55;D?K`2@4bdR3g88%>GK^Nk$t&sk^*&x~^eDP~4lDlFY5 z%rdLR=^8+^So!Ca+!;oaR|y!<5n&fMKy(A&-&>!PE5NXf!G-|cHZ==$83*z7CFkdZ z7PIB)n8I=wDzjY+@kB3c%3^Am=nJjS$);Mq0(iA5OYyzN!HTp{L?72@;Atkks#u_1 zDKB>(UMc5zn|A+Na&6Cd9oU48aF!)cufa0Fu$59PPp^-KL1urnq9c5!TIO5PEq}D4 zzdrr1Ry2Ck5eofO_SBmf!f$irRCir!Q-9)Rw&-XfXMjAm04B=5cO%SI`~J$~Yq9g! zA*-}!&rpKqu0u{in+l&g*BIXI#XYigyyhL{O;uIu!t#{Nos*CdV$4H&MUP`5;(q=~ zSh~@NiUOwJ%{l@LvB($-(WUI%LGiivubYroO9?PjjFU1idX&dq7?bY*)+9 z2nLLdL_#Jt3LR4Zgkf%Q1IeVHSTZ)&U4y&S>uqq^_24@;&K@S`g)_tqxOXX{6~oT> ze*k|#fWPxT8l-}8VULHNrD#PHcO5oR$pJll^w7z`oP9b)0UqJduTovzGohAgH;%tf znh+b$K|(kF_JrL9hmMj3Q;T%dR6>Q&o}m7X4yBT1v5fs%Y=%tQ!>B$!S`?{+9Cg&X zY>n8@)20fbfgl;qf~6spe00Dwlakz6;|a{{WM~{{X2ku)UuTm;Nsk^#|HsZwhS~{{WJo(WbqR7%zBz zSoSZOvOB6xc}rAiLNp;E(+L&deo=aRw~23$&3{I^;`o!j;THh?S$UVG;NQmCKTph8 zBYcy7*Znk@{{YrH{Re|Tv4_=Cz=wi=^}V^(Y}I zI;AN_bEFCgPYyASBB&sqy*%_GlY#i@s)$OU6R9b(d-!PuN-)^!eyvi1l&Crspd$3o z>C$yTrvx5)43)JIQ~}}RpcMisOkj-;szsAlBb^SU1t5id{Is*u6WOO^|r-F&nFgo|OZpARiIO-L;`{TftBJ}bFCuAg3$DpnSJoN7o-)QacN zu99ItdB%jwUH<^1RHPK(-872PF6{{vsB$zE;sS8N`hGe}hzYFv6qIfs9SReJjD1=b zkw{zqEih10jN>{^tOOSxN3WiRoPt8#bSO!`=<(BZGF{poIH8{!q~sC?=zp{4r0Q8a za0lb0o(VnO44b76G1pC#O(*!Y!9hV`jR_RdC-8abWhn{IiOJJRG@l=am?@^<{{X?E z(g@l!qf%ud2lRPrfkJC%I&6_pxH9xneqo7rH*Idl%0^CcM>X(1d70G$dDj z`Bj13d`o%a-haKWxV&?{;r9XkQ|4Zuh0}_%ewUc8HuL87pNG2V{{YfD{Rf8s04g6; zb_L0B{?c6MwL`cabUMyK8T0t*I!=@kp#rJHAc2n!H&04&&rE41LI!$gL#c>Q9vVwS z6r->9bUGO#oE-&0lP90kqzW}8!Tv2bLppHy_-b7}ERg3p$;PSF=}!m1>I&E;2gBo` z(n=1Sq(W6X9Z(5F5u}?XRyrLCOLfz9(V@~tbkoHuw_POJI5&^ep(LR6I%s5PIMljg zD9^(~q@1J;G%`|0kC((~B?u&R&Y=vQ<>Axl(saN|J_kdfgmlp9vT!;QPf^gFPNejt z@zpv^m%wQulL;B?q0myP1%^EQG>nrGbt0AB*Gp0~sc{)SI{jK?r=>8)xgSrKq!f%& z`(qwGby||rliL{a@YB?dC|Fk=bZSpZdc>gh>!eCFr8VOt!$2vJo{O}6bje5sC~OS) zYE`mOz~|`j(sVLb$3x+bFi^=uXe9}Ec>e%zNzj}hu9^a0bI5pU6pBLKI{u9`B+hgp z8@#iP4wy(-j+$-?5}7n3Q>ENId=8QlZzSka#T))U8fm57q=bw~)dGTz`01olK|WeZ zvN8bi({wUT`fh}KpH7-VF7BO9ktvkYMo(QgNs=_3I`q>)2@8M2q12^j`g&zU@$dan_LmoZLf9YlasL3!U2Vt7?hmUT#o{XZ;!PS5jR;6|(p~rEkEfdATl{yg z)f(%A#XH-0=PyYZ)`2PUbI{WS(U$c+Z9gCLad&iumf}P3Y zc_D&Hl05s38W-DuSm$UyK%HoB!X=3T9_WzZQAVwhFmgXthhCb!VJ#sj@XkK19`GQk z(kUJ}BvF-w29dmgW3&_cdTTRyM1XTw7!n*P$;N!Kr|%J^0gqp&`&zAPSvzq(G1T~J zYE6>lB9q-GK^DNA%Y^6UCE#FEml@QGG#LO3oGmFxopSReZ-Bm_qxKLFUz z(XM_j>5L4ah|6x((_-9ZCYB1Dd&>JAHo6kBA@K~S1b+s#7Xc2kF=BzZsXKZPw0wud zL6}Iusbz_ySXlKFC%YLQ7~IN#c&XAC5-?E)^7wda-Af~Q7#;-qf5D{bvT%PczecIk z(wrQAkB8Br(qsnf^=Z1Kx$EQ5>K!IakUVtVG@*z58epNF8DAcsK+x#YoTL-}tL8K#fz`Dpiv0P4jm;%9aDqJ@=9AepuXBd*X-nexuFmF89=pjYZK z;(k6luXv@FtoNu%+gyEMp>ET)Wu|Ond^Qyddc5|sk@|Jd6CrSy?vOgyLDQfN)e6ze zJ(%E$OUp9^jTfmb#{hnvZ7bp-&I>r(GAt9Nh0;eu;)JVU=c=3>AFoy}hIAMZqnrrO zR}Ir7j{%=9zIvZ}q{T2C^z-;?HL8e891;LKi8uqq=ja1eE`Wm_itLpvL0Ywmm)nlu zcCH(tWr?=4VD-RmopkMAjLC>DMk=RjQ2>#OX+1J}YoV47k8o{1en(i!OjUsC5s71t zxcYIUSU`%odI%yBO;fPdivax%&`Py|MwPJ+H zQo zhEDeedUZI@Pou|2yi_9T{@mgtDMk^30el^xo}d%uolo8)wI1l~R;%&$rGmtPa4SLc zO}n9Jw*)1AI4m`sxVVA?;#p}P9FXa}T}Qvk(xnptEy22? z9q}SvG^9b`2ec#&pDgDZ=7${_UH4;VuPZKzaON=7vsP^W{{ZmosN4$y5>)e7k|?2( zvF%t=(J&!_+Hk|Cfd|ALDBp~U0}z94lr13&$3CDkGvTT;L}0YJIH8-Dw3JtTAekWw zdV6YtoAqJouN8BMdMwc6$oT7RYcmydj^jBy%%Y`tm^`ar-srIj9B#u%#47aa za(p$N-YOQyc!0IF!%BDuOUu=%O4~sV_<0sV_tVx5>~Hf_W&?O08;3*XsjH(JV8rzG!IHkwq8OE$#n*dMGw^$B_cmh?r z{jp}nNbEH6(OL8Ise5&CAXBszcL930r^lh_b;*0jY+A&>HCI$TChfsM%B0*C+IL{D z$wbs%ViDF%Z;ZD=yl1D!>eofD7PWc?c8HK078CIMmgS~lltYf5K3Qm3Qyh&TkLdMy zFh37G{57mN`*XGLVtcIXDR9z^^bu8w&2q4D)&z1&y>qrt6*z6D1bB@3>&N51AdQ&_ zfs(Vqk&3wqN%-Ww42diS{ii6~nIFYNfz)mtSL3fsgYj5jj>55@4U8w0rzUd8%FPm_-i=v zW8Rx@R&`%@IyGdogr84RIsxz=dg}LqU|?3K8^p??zl}&T0Mua0m z5*;)y`||9OcZnm%`u0D)rnoqo!sLF6^tftD$@)jIuT3A4w6AgXB%#LE<63ycJclF7 z31@$reD4sVKGkA+i5L(DI&0)-{lfPbCmV$6jI@Sk+zDTMABG`v5ixB#4v%(Z5+$C9tJH# zNM;$Q*!-vMtDfb1yj?ClNY)|bEz(J$nXiyOURWb8RU+yOAF{;s8qbIL^7jrk%HfzF zqH!aZXcUn_qw5wj}qdqQ2xrVd*GN zcOd}aFRRB~1N)Q(#|KmcJs9#UwqFRtM#&WC{FLq5U8zz+^2y0d8Im7yaWwZAs8#{7 z6ksbD)D!M>EJuc)5&g!wE6o-WIBXo{Ogi1XaH#s?f|iONg`zIT7OMKV_;Q#i}GWKr_5EFtvM{hm7Qm%6vYI$ z<6xo_x%b8$Tt4F8s&!VsxtgITXpnzPmukj;2*LLAEdlu!t9q{xA(|Q$kI$Es6>CO8 zlLdyz1jc}cWatOdb;*DGj$%k>xgkM=QQu)(n>{HG5YkVhrW$?1at?A$#{N!lC3rm?a8$&iMbRgERQWOlyQS3VZE zDLA9#s!#s_+r6sXzR7tHn5SGA>r;~+=xZ5x6^dklNy~bCb?aRI=30z&m=QX8cVmL# z9|#lP5^-N9^^SibImY9nJE4z~NsKleO}>aDZq+QHoy3#Sc>NmM&-Xio)I^VWBfVum zglLrtWrz$c@HCrP$)8Xgc8>$& zqF>z$5`h36ajC$034cawGw_*&fj>0!`IKCLj&gRS za$(rE21(g~HSTc#0NhR*>@{g4mc_v@g=Z6pDLb3;k&~9NI3%+_9~iFjdyAiTC;Ph+ zK_}}0FW6je+3MF%3-PxPIR4U6iRW2e_+sv^;4Hcr{{Sc8vudiZA0!NFS(Z6!!6Mf( z!GsW6d8d#p$Ei|>V;_f?kH!3b8%|+3n&xtPvhRn(IT(;uKOOl{(!P%$|up7f+H;(o~Kxr{xjh(cR}xLUVYDpZouwWFaAn%pDQBMxR-gDJ&7-I z-iXl_#y1s|zpL9P*XhU8u1g=>4g}6Z;W3O$YTxMJg4$mT-yj&&oR)>3{@%N?mulJN zEKLNQgau}YiH~tI)3qKCscen_M zU0rSp>QX7&{j{k>#%;-KmxV06l%-9Dq++9H<_8FeAPvXMUIqUEiD3!*%lAbxh6~#s z4kaBn;f~c5Uy*&qLX}%|=*7$1GD?pet(xLFmKjoOINkON-<`B!4sI=j}(w#}_5UB!W6z#4d{zs23&N5(;eaeEI9DA0F_Ub(xWy zd3=k_m%}_prT{YOdnfW@%y+EG-TaJvY!tURhM+Sv$UQw+g$g9j5cMa-3~LTQ`;BN? zKX)%WumCLMKy&M8xk{{S{C z`%*^|IrJoujl_g`Q|$xTUY2(DgulD8c0 z9wmwg!xJGwRi#z)`z+l~yj~0AUL%ININQ3yUFK}g_0z@p9lP-wqU}YO#C}+I?AN(C zUZRL;OR*$&ka`M@s_erG+5H;zW&P6P^Z*5RoEIEE6R`CQML#Hea*r2bHYVxjj%TrF zCTQ!7?tl-nI{v!n>DN8)?tSwhWH886uhm7k_*%dO1(7f0?+sIns4PJx&Q59AR;3-K zs`6G~3rk_0TraoR+f*5U6ODVEC-*8>k9Y_^Se!HG$$9elS_20oY6s;Mb6%kYoJ59?MW2kU zO@1<07b4?QQms#rtTN0O4!c_<;Ek+4opImzw}NQQ$?gXP{AY>8O2M3|iKkjo&xe!KlK=@AERo|Uir}-I5E-7NL zO^Xsd-!*^T0TDKR%S4`^vcwq!9ooB}-16c;FxmeA&E`@*6Mzi$RnO%Q%2A^nlX3TK zLm>@fWH82CX6&7fzE$bqarJ7y{>Y8nv;;>CN1rX}kAYC{G#`gj;-Gz-YuF(Br1+BE4m0DfOTXL;<)aYA-&aKz(fD@I4r&rd z`BB?kgok6EGQ?J673@{Q^odMkXe8r#$k7CTYan87ELiLSeK55_<0`ev80jh0DEY$J`zt+z>)fo0k1Oe#wJ2K$8>{GeEh1r zVc_B}0}`u8*mS#=+d*o3(WM11ep#h~YP6@)jSz)cDe`a&b=LNNH@U&v?tol=k#^Yp zs^mA`CGw@@kvS;% zFw2`Yr}WL78D&}gj^eoM^lm}Ot?GtWTQoU1*>@q_HX%j?5r7q(u1>w%U)(3 zT9V#AiC%oZ5{Q$;zVBMMTk>;=sq(V5X>O+@9gm%8tg1ak@kERqv6sbia)fkkV1Kx> z_iri1-ju2IEsw(Xgo^^P&*bH+wvt-V*Wlx>j<|UwwH=LsI4m$7OCjrpz&;x5hxaPf zA^SpR_%Pjo+s?4L@TQ~P?y}$E`zrqc%5k(f%gG&BesEpm+A@(}l0{$VnbZNcA+?xe z7~D1E{{UTD;wL$2m%J^Z@QYTyeT&eKfcuaGjXCdC>i$=Doqp&?5yHGX;5|v$*?9e( ztak3}>h)(JfTJhJQ~v<=J;}#R$$Hiyok#S|pj-~L{!{XdbG^aJ-sLPo7*O*X^oqdq zrre=sBWy!%I$*H_rnlgKxZdjDx??E^J>oFOkWs|^HEw5C18`QXb}_kr3GP=Mw;nj? z=_K_cXIU+Q?IJXcM6A)ECwU$lbFVT#8Qh68vm>SO%TdXXnRfnDXaNa;<8H;j!uIS` zYFUDfb4tvz0}K+e*}4@Nm)*{HDtb;aoRHf2?laN3Fy>V`P5JXs6tsM)4{R7XXu;IYk0oy0 zqi!XpN$(nR^Y2_U@EFX3P6MTI{n_~+%kq5JA8KT+%2!DzjM7JV713P^29h;GtQQT9 zhdChpb-{b$?|l+UHK6C^wU%=55KA1EgZ3o-zuc$acrDwL-GjH+gRY=ZfQ`%VLi<&j zFhp)xljGx!Z^QgmJ8=*OfHAF3)g!@U66?LD%)F8UfV0t~0QBo*i)wbmhIbCjD-% zWpjmt+{%Vn;|^WG3%jRWXJ0$S{BLuLyRI`ajBo;uy^9|X+OrymIjl;5mK>xs#Ie|= zW_ihyo%k#*Gg4I~B5;_gNb^Ptd+XhEfH5p@xZi;Mt z*X{f{pb@DJ+2&h!E?%Z0Efk_kvO&HK?{!Ib6SU{kjQW5X^E%?4xkZG77}uHDw?CI^ z&`3xY%}vKwJZ;v=_1%CJrW`)Ul=O}FWTTFxXY1%SpyB5UYL;=spY%)o(ke%pM6SkR zwj6o0-WFt*%hInrcT&ALT*T7F7p^RpR7YTT^cf+7fs%Z6h1+qIM51t^#+a}@8#5(p z9mqKLrlUmMjE@tbs#D&Y2_*K$@CgnaDra^E(g{)O)4dWH8ft9v9KduZ5W{~rE|sBo zlW0dPa?N<`Nmdk*6teD_7Hu&-&Qx?dshM&rEIqMJy^PoG0)S}rnI^)Xc254nSs2I)~d{C)J|D% zKBa1Fwd0T9i`!cAM#5tt8yy$(=@Qgc-1TvQsUaO>RZ`%LA|z6`Yjw1F@3(Am34Ud$QI0x z6miy<+z?n(G~U=D16Ol}*B5%bgP!_jwewCAV%-FC#ZH&n%kdVEB8e@8C?kZB6&hiV znF9xD1mnZwtDU)nY?(1H(N^W>NJbz`2+(>GOUQ9h*&AYv*LhhLkxYA{Pq7dgQbV_n zb)CD>6Jm7=jPTi&4ruphPQu<@y$P|^rI8isU^dZ2u);zxQpYamzaUMrf7yMk8VrNEZMS02l`t(L1u48jWyz z_j$(Cg)&ra#0MC5^Cf#W8s(ptSp+`JrdfA@J=G<`yEaRx0}KGhaiSC?z98@3(%RXe z-~rpowkq5oCmh^$PC`{R&4?oTt-u9DU`s}^{-`8ieyP?nq{wmrp*c3;zpI&4hFxDT zBCXcs=lQ|NI3~mh>&1zNNQzOgZ7Y>=fwTqIk-dK0wSr&tUlzc0WknOU0yO2DZSyS3 z{Kcx4<=q6|JhBL?(T&LyGj&2)RN^vDWF+A+&>e4TI=*otS^7B??m@*FyFGgqiv7(M zWK+r8M&@l2!`TxGt0-n~Z336Vr^K+&pTk<*m^!8d7`AP;pC>j7J>38pc~r=?xdVE< z@cg*Az{XhwaoFCtkOashEz}dPNLVr?>hDOn$R3Q7GSUN74&T6Xblg&>>ky0+?e? zx^t|F3?Cj@DVF0%^HY+!hDb9DGM&Q970N0Q4pbjd+J8p5<_u$}9%ruaI-th6b|@E+ zhLklb+=NuPjLNM!Wt_&xEja)=jZ1iL3%goM!4dCMt^G~qSF97=sPc1fTGC#yoPCDl zh_+F4Ub3)hgT|m1XJd%hB;+^f8mK|yKs3Z=Lt`z&lPP-FA1AG5!()+#g3ocxI~5$t zK@B7_bSZ)kL2QwqA)RDx>4S$GD#k$Ny;U8#0;Z>a)xyW+_N;QUR*HU+xNo;3Ibg>d zdMfq(8q3{-8iS1nRoZh*kQGPgWV=RIs8#`9Lktqj(|fA{A;E738C3eZ>gN~%80@PK zT(e3gq~%UIEug9ecGbaeJVdT-?es#rJ|%1ER*AFyG1pI+APo~a`!dt6CTXFT%?jdb$m$4^ z!!`@yf!ZU;^ZLl}*Im0%ixHD{)z(szj&%oTU+3rS>er1^bh8Tfrj?pMb_pb6vytNN zU3W8h0gZL>7Ny^uV@6}W>wwsESi(WTk!;55qn^-A##LL+|QL zN}yruQ%!xNjxTQ3#FH`4X;2>@ODlp2B~L-%J{s4D1_6w+d^-IJ8sw{1nI61Rz)3k~ zcd@!(y3W}H9{}0IA_LR;SemIy5E?Al9J$!7#we@JNUA5d0!b)fi7eR>ZCsFZ8YtkdppPTe-JlC&^M36i~7_f2ZiBqzRP$aUY6BV1=_ zEs>Bl*LL2YnpmFmW4jz&_EBXRhp#rq^HDjVl+mKlM=!}$`?`Z+fvYhDG-VE0i80l( zLCMYzvYnaf1d>J=U`|AIWV92DmuEZO_w*#~x1|+^*=9>nO5Xf2xZJTzDF8yO-ALRr zIvu0v#<{)TrZ^Em*~^1eT8oh~ZPOPxkizTFpMnT@p_`yGG zJ{s0Ahs};b$zsvXnBue4aX8nU?^45dSK}+nF8gv=d2xDZ&c#!LOQt%r1@rCC@VZ$xGZA*eF+a&+dt^|d9d8_v2~A0cDa?v`VeMMPlP}O5hACV*6^wyzj9nk`Dcw6Zs1kEZKr- z9X@vJvf8Id~vIhmARIy_q*8h9>o9&4?=exYGLg0&K@^aj@nrPNRn5R z*DZ;%LY88yf-pLLIzkh;1a$X@rxVz$%m}GDj?uv}&liigJKRlZ>k~Mu6iWoG2JL z>(f}q1Op>Sd~)a&=E${EcVHDe{HGrs$PHLymdpX9mb?)(5o|%QdxhDC-&ayPJ=U%V>07A#tmty)FZhTO&QYsaT2UQPk*tv;iU|Jwq zh=h2zhmOCWIJth-U^OIadCdpv_PYI|(IydngR>p#Zc@ZG>`BN^W$Dza15G0Jb0qt6 z1~!%R!Ts}ru3x(YaFI_*scbRHZyC4)A5wx2N`lq2)TsoxtkP6i(aR?0V@_Ax@-nM3z0k#sr1{k2I?>_Y@Et?#OVg zxg+DOtwL}bU7U^Wv!&`0D}q}&cF|gwn6YBDQ8G1)5UHB5Wd|Utkl>$21Nut!4B(7w zSqesSI*4=YZ#L9Gu_FP?momog9!R}eZPS6|DHN__Qb9}eNUHLB3exK|#`Rf2GTk!Vi^x;(V^CAAxyamPDE?lv-^bG}9x+zvX7b=#*sdbJjEb2OI6 z>B}`DK!zDAw=L4J@Li!3S%wE$xcgGbYsW0v3XKW?2^$MxcKE2zT%Buj#6*mP(vO3Y zv(%I&Aw!Q}T6}zmCOe&>p0IzKRFBlsh}Fq5GqH__IK|}V6pApj{_aVG__t^;pRHYt1DI=OCaR5rjr zGg`|$NYPgoBX=@9%+A?Z{lk|hpeLa6z#7i{br-`2+p?Q{%Xm*q5nOr{$d@3Mxfp9K zb>wu85ncM^D#f{&E*q%WNa^ImMN1F@>!QCvcZ7VivM(wp!OG&!D0=8?U) zRQg=S7%0yE1J=N9Cm9|cb?3@aj7i#d^38M!7pE>kBp*M>*|bc{XiXCQ#YoB95=zS` zz$HXkRUXqZ9%o%JwQ_GGpJwO4EDYlsY~|CvK0aEd{yHu`-9likxXvXE_fi6IU)zrX zn***gcJTKuHXz1SnO5kTdB^p zwhQYcWj39@wFh@HxfqG;3m`N#Vh{Inm2(=5fYr-q+)j1O_ zfuz*($7h{P&X7q;x`70?RYO{p0=o46Y@UUb?gV&X_3Nl%rZ$<4DtkG)l{>t$87eZz z9P=JC-f5X#-K|T7l_Z)%090?aupXXR8P;C!zg?quZuE@UYEP~penusgRiSq)QP^%) zL~Jk$dcRf3EHS%2TDaQ%pkYVl&)Dj9ohNTDT*>mAA9HJCr z!#QUJ{UGb0T8X&RI!M`22c&HZ1c(nGE_}8t6a1tbuPo9|kvjurSfyi9PJ!GI**ma3 z19!(#cyQWDb~HO;bAHqrmjjcmFU7B(T1xu_OcJoC$wwpg? zI!S70(C_41``Q6VXXTQLUPwa1+)5-u?3R&wM3DwNz0r@fpefyq?ixMhK-xBTbni)? zoVpPqxit0Rw4_z z=pv}KHvSy7gRNy~edIAWQu{_r7U_`PJo;x;ZvfFf&>wz2S2=^vM5ArX;``P|ec$1| z$f?+~Bgh)HOKTUo43;bx3m#fFV5%|>(%B>9qU1G9h@SLD1bpsnMFNP(fbBzuKx zNU}g}1aC|-0?~;<+)?Cwblx$XZu0QfF=#j;#?IR1zcdFqva1(4G!gu~B+8OZ&gKxP zh~ZQuD%t2dlFiY)hMl{ygcu6>A1+iXrEgJC*Ze|D_M}Kw#czDYeg_*@(g87-`$MNs zwd1U30>sE*U9j@vs(=BTQD6CLk<7L2*jlt~gJvbJpa8L-N)6p)RX!sm{`QM-8oS-t z$a3f9ngNy~q;lw2B6qY3+EXH1B3R-sNQEOl+JPesf)~_O`5fxuXH;uZm1+hU?$~lu zDQUyyRXGb6(ql4La8yVvNg}k7MG(q~V~R7hhwy*l)y_bi9iMKN+fOd^qRh|BXGTi3 z#9262U}N^>Bs&0*v&gssLZ%4Ddgolu;7B&~-mID1X6*~xkQt_-0cj)JW^fg@mWy#4 zzvO^Mw6hbf!%*|LHq@jXS2e9aCs& zq+Y(gMCPawfEjwIvwL>WCmm}yCE}-wmcnX9EZDa^k}(@r9g3^FJHTcx2Z$Qzj}2^8 z)>)VC{aEce`c%qhMVxZYR*DW{*DCeiYVz0P4lxgz2& zBnBgs^OdOp0CFhgJE{opiVZ4zbjr2MV=-+rKIeuxf=DHDm^j-wVdbS%_hM_0O3#n) zCbJ_+98|c~nmU!(ZW&m&JZEsqu))qtb=N<-*CQMQ5*%{%CT=xzEb2O!X-&-5_NH?8 zE0=*{Q08c>?Pm5@)rJ`Z1mnzkjczz`AmQ2j+i9^eGl6fHYF=`c?j@v(2?9f5&ARai zcJxGW=SJrkGP_`98)$8ycvd?=Dk;5i*O$^4U(@z!^J{*;;nQL~~6fH|u8rG$*`y>%XmSV{58Af+z+(1<$sLpk~2sX@#B$MUH^(8aj zVlqv+zUuIXK-O#3w9?ozfUdFxk_hCGFjsd{;D8R|NF&2hZtS8?6&p9;K-z}Kmi4Bv zygW}IPw@waq#Gxh$O3Ch2w5Z>y5l%egZw8^D7X}87rfaaq?O&A1z)u12d9TzXtnO{NyJ!IyLb9oX{m-P+%)+ajhU=mS*3{o z0AG=sNKmVcCJG} zLpcvafqdgcjOt10^AtGu%nio9TVBHZ^V7tTnPZpyY-ioCE2`JoMuj+aQ|hH3UMl}R?wM@7WskPU`<}VZuIaYnoP&m*O+_YBuHQc1oYQ#; ztWQcRwrI;tScpjVeb~~&#{p3ZmO+iG0nfJ|fX;KLIeWT!b2~XQcI5ROw)~}9jsq1D zdd-x%FCkV7CQAKhj7OdOFhN!)3zu)F9d(`93vt9T0Eq%jx46i?3IvHPD8!B2v!c(n z%!apI+?Hy!eq?(yM#fO~if#%DpeGm`h&b{Y#&n}(>U>$0`n#1T?}+__+~`3R_0vjW7DTDXuy98fEjuJcimrA3lVo!bjG zPl3)pz2P$h?$3B;GJHInvrXJS9jsHYUAJ7VlVWL}(vr(EEM)t@7@rtIs7S|E8P_Kf zs7=jjv4^kJlmKQ>UW>Z_017tNPjVY^y2Qk8Xo>X4Cd_rq4c&S<=sIga3j-leT~1P9 z>@ionX5Ctp<>haaYNY`rP&BKCY0&MIELl*@4pq0{Yfc);i6%e;zsxi2M8nV?T>gch z&F~!m042yR9trJNrDdl(5TNX7K79O=iw5e9z$nHP1k+C&vGpZf4Gb>FnRVN5XP^4#aoj|h&nIf0~ za&wIaS*sEyo3G5OKO<7aw`-W?TJ`WQN|UW)ynyUULe5$8g#D4M<8!zPC(_=OrYg7( z&71e`_IR^nkeccVS_{{ZnRuhFk)A3BTGoA)Y6+QVWQIM! z$kOC(RF~U3R1Ed_YY5IF1*jZhQYi0Tj@uUScMfah$in+m)6DBTZ|pdFi+F2#{zzd2sAS)N%dK`d_#N((Vb8XTR6 z3xa{L4nEr-6OBx+PTXQm9AW2gN^lX8AXM_@uq*4&#<0zDclk<`V3oNE0;`gYecjA( zSKM}8;Q;7zPOcM`*Dp*t-1fd5Xfe@7eqD)_Bd20GxfyEP<6)WB%`Q4d0j4rUSr9XC zF*@Xy-MeD=b?Kn+@r;SN-D1o$+z+KMc;TYN_Hy#8cCV|n7Oqx-;eh`DP>w}1LmcWh zBCkmBpppqA&p6fti#q$myOWAj0Mw$B41>OVR2HC$cNXkTEm+-JN@}DD8a4zn%asQn zAtdYdWb2}4-NGHlBw>dt0y(#}0QJS?jqL+YI?~^Q)`G3YVj)Rux)CF=WXB88b}aZI#%k*^fB-#yaaOkamEs zY!7KZMQ$r2jtV|br0)+KG9dOX#~51-g&Muu@;dK3uSXheY-?^wtoRZeZ zDk!PXUQ+SjfI|(JDFwLDqNBG>zyXt%>c>7O9ehSG5Sxin+O4}DeY;lLjBv?2j*^_m zkg<^>ay+BSEBY1Q!mx~_fktqJ0xAQA>c=|T<~6H0BKaQ^o9p%3)On-YkW*05C9%P;lDPx1-4^calt8CGB1GT z(5-Wx*xr(uV>Tp3dUC(D9Cpxd^C~=7Qj-->FbjEPgO(&cR^}8L9lE>YXTJ_zs|=8csgU=y@p*yA+<-g=2|HCIjv&2ic!V1MO#TOlzL>#n-kfLlKo4pyAFJMvW&{ zT&w9-;ggiLBgq=?t?fK8?TpDBvL7bj)-Ze*9)3FHc@RbvXKy8Ttr$n0`E#pgJ3O6) zvu$O9#Ut{H94kvOj2@`0MtnvI^ylM^R+Do{nX3V`mh<@(Mp{7wI`bvroefL&qNgo4 zt^^HU(NBIuBQVRE21!2yj-EqT0i?+0F&z09&&Z2_(dzwPMW1px`6{n8k21j|O+WQC za8*%(XaHQ~mOuyVKTSvzxi01n(Oi!AS?c$E`}=udwjRA1`01K>M;SE0%VMy0o_KmL zLx{b=Gy2LhRGzFgwcZ*rCMBOdXj{wG&O%o18XSE5xdle$Sma9*UY;&GgUW?xX7{W! zM@ECvo` zR$>}mxFc_YRrBy9b=DeV8-UO@9=-31unC1Zb1k<-wLOHa;?F5f9=i-QQes66=*5%= zKzj5of$_~2X$Mriwa1)tc38G%foAa>G?l5_x6grSh?=xj3cHz=z625Np*}5= zcMh86v;A-mJj8N3UnEa+Z}vpM_X&q%kxOvcXJ{BxD;|oTy@77#lZzzPZvi z+Ac^Hrq;}@b+o&#d3ij_?P*o$ds;zcGkY>cqWeV;Ebnjv`Hxgsb9 zdA&(eF=JJgP6`!mo0C*G?oQ@AwkMgBI~NleNFjVqbA~=%16oAEw9GiGx$AD+)XL$N z0b!S!)!X94-Ml5KMQv4%F)fyIs`sOj{jeMC?J=AN&)M?VOl{5sy1+y`lk=;OMhi09 zoSNbFepMYh$J(bY{y*l~)zY=4nfKwFVGKQ`B)ICWj=m$uS=@wUw7KLx34-p$xpU;R zJQoj0XIG@?1UnBt4Y#4x&`FLbkxTyZ)UO?-<9Ri` zEoM|fJ|vTC6CAA|`#^6}2gKtePI~OUz)q5A{MAfplL-#5BD-wzEmmsK@yw8+Sz)af zJ^1RXjnV>e0Bn`@7CNwXN9NNVgbmw{^_gQ*epQ#nJ5R*irwx^kM;juIq-1r8n-XJc z5+fs~dJOA?8CFHW<;bd>Sc-D=t2}k8R4cuE*Q4X+uOyZ0w9gca?33wbW)12C1Tpah zjcseX`fDy=LmX7;db5s|eok(^X^cx|Ycnj18*(WGQHaB-L~yiTO*w=yKuA322!a^94f zhpFAm=lGI%i1=g5Nuw9QGA) z#m7$WT}dM4WJ#*kkxZ8&mMEgK*p~xg8{M0s!8jiuKMi4Q>N?5qIHujoCla939 zYL~4^BFSEJAcY`?31Z6R2h=v^HUKsX?@CuR2gvO0QbBVD+PM~| zuN08knmF0viBDIuLZ~dkZ~~V2k1buI##zvZZMewix~e27GUbAQ4?h`ihceYG$e2|l zu`Qr!SB6NAQ9Ze1Q=YkBN%)OuIBB!u;5>-}JBGu#Q7m?IRIG^-yw&X7`8BHo1!j`5 zF7iekuS9akCC{V)yUumT8%A)fSaKNcR_!KtJh^UA@)QL~?JYLjBr?|xGjA$u%vi`o z87NCJ0}Kw`Xf(z%A3IAnNdja>_vGtOmgcE^m7h zw%`|b{{X4|K5WzgKz+QqZ&Z7il#k~v@_fn_3bLer++nv@jZ`EGNjr9&6##mejdSa} zc34-QgVYs90wJQNv&M4|z)|FRhp$hXfb6<ndz+UcV;yT9C^99 z6?XxYOBG5rzekjUnmbQvELdPFfUM&dWWEB&kUvlWy{uW)f$j<9E}pau2;=3y!_cxbB| zxjTI5hOzWZ3y~bGOMf;{^(5nWmNnV#4aXpQB;u>v5qpowT1jE{l1ZVxaf+9w z6&>0%QI;yCr-lge!Pb|?S)9&$2R=t6003d++sdm4v-^vXemXfh%9d(!Zv-t3c;Ur& zu5lESssc+gf~4c91M1fNPYDoc>`e~r4L0mbGkjYt`FRJH6q=c;Y7sXUk7*1W zrN~mUY|n!qTMfN&>D2qUMtU_61{ep}g2X=DXr<-u@wHZGnq|4lB#9V?R5GeMjIyli ztee+6j@2iwI%!T2whW!+P3O?2Ajq(w<&vpd_ZbhjJaA0XUEHkhLQKLX#O0*jB)gZv za&ktqyK*t_2d_ml@}PogN^%>NHh5dSbh1&cUKE1&-?dbgP{7VZZg9mwWCI}yJF-~$ zX-LX3&{@cQYBmGtR3s(d+2!T6W!V676@F$Xvkxs3@w|mu2oATYH@Gm&aEeoNE_`v* zT@bJY3zNThEV`6~vnq~ax@c~qPaKrg$z_xwy@v`wLzu`cOD5Bjqznym+v1E|M*~BR zTb*m9HF~*bskLjjIVj_Kqp=LI%IOas5L*knK)cM0U+#k8w}3KFQ?A(YGl&8a?-#=% z(}vu)tmhEhxAMnw$L4l&J*93~)o43Nk=ChQ{m+=1oWv+DUwbnUdJ*&k@yKx!e)b2; zwC#H0k%$F_e9MyU$f`B|Ni4Hw?7_?tNMiQlaqXn7j-o_o>Gq`a>Eo@XGQv*4bo{H1 z4kSY8`KWtcc{YYlJKa|;ddj&;tK3w;W^jEeEGj=xv#>d5BOqA6C`9Nub%#5DSDQ7w zt@(L*cdK2{ES}D-%F&TUin#S#saw6zDfh>NB z$E0lPS8i-fS*YWGtY(W}J5CNRAH!96{{U#f^P6g`X{KQ-GoeDmYPY5HhVdT_7vTXI znu2!qhwJQGTArudioeX=rB)iX&0k?_BH5a&54&%hJLHl;ggX>PUZ*{AtZ!i$k9>tNa_2;8P5upgrO*Ag& zwa@x5i}-(}!T$FSyx#|}i`|dVhn;$yRXjey`f}`E=SzjRVy77m`Q?g*c>ZN2RSaRV zGI~U+4ls&-@6EIHYw#XE2j1L{5!Ee6r_R4-;oC%H)nVARq2;G!j-3)LQo6I;&})nmRT8D>e&O6`M??(6h2~RM%}%3 z4vpk<)6ZRzCO!BZ2-m4h_9h+jJ~!f zBd&Zj{glIeAm+S+U3RP+K-(<2Y*3`!{Yz85yoev@grVguIdu zQuO;vg4*iguY1G#q9^BJ%VjamMZ*ytq~*JQ!P%0xLzv=h)03C1vN*6nH0;Kxv&=Us zXRhFc+=p?`pN6>jkRda2BvAAdxN}!=!CM&(C*&OY)`}i8k>jh?rA{6>Y}Vr>vt{ZT za>&>j5iZr-rO!Yz7aP1aq;3-tDF@PCxUtTiY05a&oB);^_i1ppZdl9yBOJDCw2n(C zMD)WiUr==1%a4cCjYkb;MkjAgdHKacCn)O?*-u#MOJctpN+|g$s-&ERGLLuOB4>^@ zEevS5+U#Uy#uViN$?(##YyjlAA@uUAxavddEGfzPspVH?_a%&1cWEP)BA!^rWO%{L zY;B~fg(Gt0b;dOkF98tyPciInw3@EC&f11gin#V1am9Ey^Kn0Y!A-m7xcy=a-*l!~6}`(%j%IRIf#*elodTOAIx zyTg_w65s+y>hj3+D-+T{AXh$KUbOm`PxI=@$VV%DwRok;5o{ZzSr3*dxprA8RK)j#34-WS4?hU9y|%i@bJ>S1TF(A z>ch>>$_(5Qv$xi;7W&U-8zSsiExC+w)v_Z{^Ji;{;{-5Jb}7L=J#?dRhX6Urg&&&= zcBEo3z-RKS+&>F^$0Zu@rOCMqtv#T!fij$Z@IZYeV*z9OHLbWx^V=XjFvgygNQn2c z1LXNuZC>JuC9y``28K>X2uS0ZqqR7l<#>ItA_K44SqRFgJ$ma%a4i``5J1m9jpt$| zDg(2Z$hTtIGl5O$#WXCGdIWpLXvjt^V`-_)W+4MFkp zZB+QnGbK6Zl`bUowQRp> z?cS(VkBfGS#E^Tn;(|zOLi@mze5F}I9dn!w-7~IOlGPN&y=t_a1}>_U6D>+x zEi4w?7bt6#R(Ka32_S$@x??#43Nc9T&qRQ+V8r-N<&K?dCz04H@<_ip+E@)c2`fsOqco++}LJiByOme!EV6 z1NG@M_?4pa3J;OI8U*+pO)oDT&lxiJTz>t08M9YR& z7y$_J>zzQjBPfQ{a%b`=Br)>t=UBh!z7O$UV&qT8avX+anx`W1!3%pkHz{=)EwFlD zYkeRcbN{_?EYQ;bj;v~MvD;%p){V|tx=*)!W6@w1C zh&XI zT0+cYHew0n2*qb9QOV`%P;qtm{!_MAXlFH}Ej*m3A#MR?LL-t$_DZ$}XJEwBQXhz4xY72FOTIa4)H-KKbQ$uAquo=di5;<;F2;_F{oDAu=Ce(s!ZfmT>dfV0N= z`!AM^o{Ym?CylkJ82s&|V0Im&v0^M3ovn`l06|uGj?Ut^*jlZc)75KlA1i8G3bUeG zs~c8HkvEp!@c>_8_#Yil5yoAOzjrd*$4SFAykQb`201GnHz@CHPV=Oct2EKmn4$J0 zSh}o_6pF2r)Rw^V@z;;VOvH^$NF3n4<)Dj#20m50ba8=N-zQt#o>)HWC1T4WeX;E< zYF%X5a$NdHK*!5kTY!{xOgRI*IcLw(v#2c-N9Bzha>}2Bj`wiah8f73Q54mlWMzs- zB2r0E7;R-=OGenq>!dhgA|n&49iKPUwvEstNfh()%|+e(RIkWI%*PR0uD;ly(~7G! zc@eL>ETph!13rLAUY#}F5F|wKjw2ThyyE!L*D!oD<%4YAl1eLK9ve$gCH5%E4iZ@= zBMTIc?YyY)RwwNYkB+!~?504A0twT%r0iQY9<=IG@r`QCP}gbXzsS(u$s;Lt*trtN zVOco?SxJpnF=H$$wxynf=a>BNGNs`=Eja{SbscOh0emCP!YWRw@P zRi?o(g(g9``bI(WI_kN?2{w{qBq$D9fY|yH65CvB>E5bw+*B9fV)OmS!#huNiCJRfta15Y zVk+`RmKhUjnG7Mm`=bV5GmUrf{1xcj(QsE6e(8MQbKrKYzE%__Imc0J}6Wp;u zZm}s>=Vr4U54mL(vH~}>;de(S;s$zuD_qxj8SwIV4H5yXvF7q@+O>tvaVIucd7J!2 zLLn^nX~7|aryXfMgBr@@tZd^R<_KW8Ap-dM4QF;*t660K0ISYMC6TH?(ucRv+L>m} ztFqd@yJNa*$6tsODESz$-kI8FJ7jEOc9G~l7&_aBA~9q7Sl9GMFO#Hb1KBU8U4K z>&^Mdr=Pg^Nh;QMkl`=Zu0(Q3)5uJCV0SB*k8VlazN~oaxLfj!Oh|XfdD*uPm9*{V z{{SNHd4-lw>_~8sZje8ub-r+c>laG$aD(B}RW{ms()QP@EQ6XYg%XRxC zdGm47Hzg9l7Tg}R5+076S53NL^{S78?&hPywa!4S(r~PJyOEYL%OgfU=@us&zWfzz zbSvZW*Pn91_u6BD?+u!B>Z)Qww5eSO2ssIbi(6u^PQ=E0F-qmE!zGLr5S$Ij&Cy#p z3*tKKd5GNAawV`E#zW9lz5_MaB?$QYYi_%WR{7PHZ(Kr_E7^xaVkAG9 zIM&m#cGO8d-A)b!7sZ;K@x@3YRK!Q1j&N&TxGGd`8rQXUi7#++{FTUgtHPa|k}FFEsai>eGbk*Kh(iG> z9%VrB^VM6iD4kba6Sp3&eq{ahK^kfR%Li{V=6kpB_&GUw9yZ0fZ}8?O)`yD*B#Vh9P4D#kqB9z0=%gT<`<*#xaJqppiS+4Nt4eRwmNd1Q=9?2|rvaUVj zoR!8k(>UX%jf3LZoVxZRCZ~UIEEQk(qO2T^S@=j~v&dg(gN@|w5S7%8qFDq^M3O|i zM?<%JU<{L~v1CF;%aKyuYCKyF5PDV;# zk)N`s%xa+++$7Dw7!mqU&&`$$>NV+X2Is+K%gFY3CsHaLPd7AUiL{)=xPp6sF6k!O z9>l0v0LobtBOnp!16|*CG7qQ-kZ8v?spc)-SZgmp=L|=YEwL{n70Kp!enPeI(n}+5 ziJUO@6o|+!io`FrFgG7oagA`8m`+A5D&w}DiuF)p?6kNEq>Gy74ap{!Ds#nN-PesE zg@VT%lOrTy0aSSi+8b|9pz5b6#EKS`WY|)KHf_&Uu$zJ8<>zNu;@u8CrD-Ba>&){C zKP>`#@kH}9it*rpNy~0;ECHNro_C{khR+%SKzmhOr$0XB$*b9=-CT@Nq$aI2X&{U- zT8Qj$RwecNq-j-HDeKUmj=GGDt;SNv%gAHay!l=4fHPe&my^51P~;`zpuNb!ZDVL% zj8#$qrBsK>+6LF!3F>kWjzsttv@dH@36H;k*s*WZPi!W z_M~GRY}gxeJujRbZf$j2xFa%OxI-4pWVR*xG!+HMpU|`CiatKgSYEopdYhWd0Sd9C zaVQ((jx|BGmmqZNPJSBTzD#AQnpyf*@eT`o)n}6K{y(>*hIifjQX|PZUPQL5|IwZpbh(J`Z;r~wCkn-d3n7n%|AMBtM+{eC0*9*%J4kt z(gsNIfWzms<3CwwS0e!2EIP5dloLeRpp~X5uphWhL}R_yKS+<@rO9a;-~5UY6G2lz5!nyyC0)( z&b?kdH-=b0PF;)M`+hmZzRjU6i8)9iXl8(KPi*7{Y!i^3HuqsjERiM zEb<>PVDE$Ubl{0d7y>HUo?8|d7stg99VM!T3I|!3GmJiF^zDG&M6(W z-g_3hTB~cat9-3@63UGQgq7#aYRwF+T2hK)^A4v28?fCq)o$!x8WFQ+pCP!qbBm5# zzC|B7B#9Ij(o=7UjXl0WN)bE=a80_vb#T2*kvSp4mRvCF(PHc;Y}%F&^SAFC3zn+H zKDW=66tce?BeNO_3{ehMQe>6PA@)MGq}W2rtI>mfkEc4=unzBrtSbKitK~+K=*Ok^cCCuy z3lq+T9G)c%sQZ1%XAtc@S@IX#Pgc-!&ylRH#7W});N|lpA0WvnxMPv?`cIKoZVcP! z>rZi`RSWZU>da(oQ&o*rw%V)G7*iQ7A>E%MHPP-T80s$L05M^^FG5d<9VaK}%=0Y% zX6wT(+O{NX5XmvIPQe=_Uwt}FT0xV!NXu@@o|@-{$iNuLIC6bsX7QS_h-zi(Dt_vh zli^#BaAOoVENvu14;*SYv19~qU_S8Q(=e%({@KLepOH|xZlg<+_@V~$uD?C zEb&%8<%NcBEVDWHp^`}Juvc7X2hokEZb2Rz>9qnOD`HLyu1!(<asUxNNSDjL~cA{`K zJ@{Ju^TzLTSfAU9txO+h-E}0XZ2CMpW6bFHQHYGB@{nq7%cc6dQy|Jks5?$==TPw6 z6+SbSOFA5Z<`&HGu>%vPko@7Tf}>DF?-VCtCgLbG;J=0N0oocioSfJp)9E zuHJl`mMZXQsZ%v8#zi9%%BhnSwmr<|S#h3<1_W$+52sjMn?Q(CEw-}XOt&WFmpJxw zdR7cg!ZZ~*h~+QA%HJ_|7@4OQZbIY;7u#h%wjU4%-!L`3sMKr7F?_S<4i-eSfsS63 zxA`Mylru}l&+kiWpqd!Oc4dZm36=#(Voa)SZM%<5=k(|d+eNVPXWrbhL?QrkcCEUr zMDb0>%+N{DwNIClLKay8bT)k;F4k`%c90Hw>mnffTsaSkV0Y~ug=wl!s=T%;^|?5j z8r+S_@kPwluZgaR(S?#e@7j6#n5B&LD~z8LqllE_W~?0Ji}UP~L5VRKJ{vtDMaN#H z_v6FQQ9=kwHy?SOM^NOSKP_-hawB6LvaNX)UC{aM^D1tZw8e0pl2buj`S9h$6@q7O5E{H!%^arz2SS7I3T6qb?#A<{@qmyy8cc4yDf+&SaUKaulzfN5XR4q)^@*&k-GJ zm5~);oEMhVwSx&GEX~*5k0Z-#bR9Zt)3s{zfQ|En#C?aWWz`WREHLDmIK2_T6$b)2_3-AuB1-$Kw|h!CB&u*?(q5u`bslZ*Z$Q+l{O|v#cQU1;aSUbNPAkPH_RY zKQ3j@cN0>+)*vW`|4r#FQ zb*@%NnIxV%vn-Wuq*A=eVln}QAn4J^#Nc`ufpu~^IJo|^8>@>c@n z0f1W^*AWLFB#>U`tyEx&U^P>9!GX1&c@E&a52R!^J{s8Y@{QJ+uT$*={)=>~)Fl@H zHt<+KMBnJ%MFckEQct2aETo0&k)I8E)_Bcq zBHhvCYBi@(VOY73$2v=}t?~c?dsoEGKS5gMj;v-x4}& z4hx9WEi!QD=C^ln`EplwA-XZooz{OVcZ=ocnw!BbYBzYo@@|_8PRAY&7iho@xG*d{ zuzK{@RHgxFoP!PR$aJZc2@k)m)Es2V7bVA4uN1S$kST(kE;Ing9SDi8!kFD{|Ml>LgmR6q3^Ieke#9IcI@nA>MJ7W?x>rM z>8HevT8xfV9z(YbhG4DingDCRmeJHg=B?4}f6!US-lvkz$> zXxoxTN5@C17)oM*XcK!~8C*X_$v$H?7wk~uF{g+ua>0Awr;F zfTw;s4RqL;J>W>*&fOb33o%hRh5%u+Gwbs!)~IojaZ{%rlfu?sHN6`$^prES6D&P2 z!E=`Dh3HRA>lsYS(Tp5`Y7X6?VzmV7c{UX0%sQxz#qri)i;Ie_JC`iST6-l~<~H17 zB@+X(79itr1(zcy%Uv8b$+T_5=Nh}!wgZCm?d^Rp}&mdxBS|#!UGBrFO-+ zK4IaJzS>O8$|Q-fHB`B8`NWcO>004}*6p>5wF?(5(VOILZ?(rkFbkRl;whxu zFgJ7oN2njKSX{OtB3PPXmi|FZWM#9~sB;{R`y8BitXzcE>up<{CtCL~BwQYJ~!E7?+v$1i!eQwU=x%9o;RyhT!BFSPY<)$iBu{Q7- zDdtvUPqwPVW)3$EZ^ha+tcXflrL!?i*p|o2xP`rQc3`@QpN3A=w_lW^=9DEa8nxtM zBF`I@k>X*{sk8iGNkX!OUOuwC+`gBtS1KzP|{!^m1T#mfAIh@54* z;QQ2NRaRD>K7}?nO}}N&QP69s3wG^^M7XCr=KU1em^4||L}lmZ6s4G?TQp zBYCgbU}ly^K-*bIr9vqR6-M5g{cHPYbKXyjKmOc)+Wh|jv+G# zDgOWsc+S3?z$E-RKTdyXe7}v4+mERp#fh(Jc?i&iXhJk0cAN)J4~_Wamg;}#tLx7A za6iO1N71+bCF*#W`%Q!N=h(gewVN?;6)M-a5?Hn)hB#)zl-#2s%KolKev#9sU4K7u z(m#2*2#^7svHHd9u+e_i!?Cv$vLmrZ^lYc~lMIFm>XJ!f!XhfPk>mjZ+kuRMo|}%i zWf=$9F&jB~Rmjn^Jh56lMOzi3RlO{0OWS8jz)i_u#c&#Z|MevMVAIF76;?T^uZ z(X|3hDUWX~3aP_KW_x$zx$cUPFsT$u<{aHS56x}J4x<4v)L@p@up~lImNFY~C+7Oo zVTj~5EWRyoTeUwO6?Hz?mdv2Y;UusRxFpCR?%2Ht>oMEV4QC6Qqm4kNc4N|}>;Ny4 z(c)&YR%+2jA(9a7@7Qz_Osg7#k;aX@cAj$m3S`7P`Ud9cQd;8Za-0p;doCtg zq3zEG$l(levTFIk9^8ssVCWYsjbRI*OIDolCoCzoXCOllm!)EM?{!Pf@pd?lRyKx+ zMXxlnZDU6A5{U6g*$Er4-GkE(3hS!ij0-b@JBN0|yDiHAH5bpf*0ebu7mAA6u^$~R zt9K=iHQhee`MNz;VyvVQv}4ji>78;|x(sxec(@I;?OGTCUQC$x>Q<>@DB5Gg#1Fa5 zvq;H2wk0U$tzvyCf)L6u&w|UY`_YHYcP{&frA4wycCOD)p<18jgu?f?9Grh2TWn}E zB~-N`4;zPI2m{(aljd`;GUdai;1~%F?EairOktuhI-%>+p~=;7)}AvMg7x(rLytmp`NFkUAmr{@zsXavJ-@;#=QS5-f>mW# z1f*!2w`6TCk`F_tJ|)Aj11rtCCBF89_P*%nzDX&}oCIl6NX(z&0N**9~%=Dnm#iJ zeBnR}ZNoz27y?u5K6N+rMnT$(PP)s()#U2cT1I;iMH+GGY7d$D zf)KPRC%KjqV8<`@Rs9} z)QMOuk~F1=ctal~$q^6L9X03iSI@i>eKDI#gFehwtX<7WrF(rUA<9~Qp6nE0p_=hH z-7JY6mkAS3GXd4#7yx=krU1?&5TrmPoc>N_s9BgkHyaq-LU*tKHp ziyRiLOaMygBqh!l1Z`YrI_tG!arW1OGmd%i2SCXmp0 zWv>in7Thep&LotmkT8CSFSHQD8roMx!-6Zexij2O327CRF0TFdXq73T8xB-ZC;!xsMNU)hR&t2T+PVP`C2783eZZ^ z@)YY6Gq<)Cgl14l897i1=zMx>FLQD%CJ5D5&9?I@4FK=UnOQKK(vDFrOIMAJ+9>Bm z*>))$df;U0BMLzE54YkDnUA}csNu`Xu>hJie4M)z@4-q6%N?krYnIhMN|j{}$qa;g zqh=p%jtfaAMDX#|8$u$WRAadL`xUd7$a3o3FRXPh5I-+YEE4(S1Z|^Yxh=$r)psyQ+xB@0c?FI-vs){7m9Xl~I=}`YgpBP3H;dx~ zT;l9zNUH)^=KBXa^n_S9K=k!ws&^ehS-CE4UMd`n$e)QMXK;gKfXFZgOLRRxI2{I* z=d9@r=OIex>7tgP0;4VK7T0Le$+(1NZeFtd`_H(I?=~;+z z-5`Q7uFcC49em4QgqB~Kr7cR0Oox#YG>peA5yVVKa3C;FgKm6$brO}^b9oy1MjeZ= zLLww(+PZ7si1HEGt!J6HSt686eCKGe@c|^2p=4lJU>O8@Pf&H(Bv_fqxaxezqb18I zfI*B$EDFP=?a6l6DR!^PRpTt~p=y6zvYO|rq+JA|gSO}BqvNbB$K4%LEcj-5x1}%* zIeNL4R~cF!Zu9aeY>IZt6{NL*W3K}c4&Z+3HO5s(j*FV5Ju*KxtB_hmnDXT6#d}n_ zE_3j@aLYAyP~v-N!{#JV!fB=pw8Xvv0-Wd1u9>rFN#Gfo-D@Ir_q>^G18UpuE^m!q z9*k)(&+)usyF+F?i*s5zR;p3)>px}p_;f!`x48(ogox9Qu6mwhwQ{ipmSS?rw)z(x z$<>Pg03&Sk6{m*eCaiocQA!bb+WUhKZGBt1{kQu}eDoeJj3Utjg1n6uP_`TwcgK3# z?lZ{t^f!Bi&3fWRFcj)qc9+qB9ru+oou{bkGJQJAz@6EN80oLh&Yo?hY+@obj9GF# z&7)#|N{1(I86m3s&e--vE*B~Cp+SurMUjlT>$!UM8uV}KA2bc-Jh{2nmZhjU&u^d1 zx;xR_q*WoU4-)XnQ;?758NKy@g@#xbZx#-((GNo34RgW)*^o7#wTL83feC5hiEWsMTAfl?Z zc^EneSbeD@Es?+7>Khs9*BvwquoDsv&7|b?N{qy|J+I_X<*mafEeCG#HQpFjO0m?I zv}-hq1jVgLH+`mHHf}vO_35I>h1qB$SLltex0c16j)=J|ar6bh%39&$mbrNn<)@M8 zMzdHDiDue!93v~df&#WqTlGc;ocLj1(=i?Hj%-^3bLLswxJY~lEb=4rtk zR&5|dSDaOYA}2!0FbYB4w*VDAO8q+0&ju#WS@0RwqoA(2p6M-}73)0pJ|-0Ty3+EW zI;{0-#Nr_Iq+RghMkC!#zDnO`0G&YLnV4>ZzG>Fbo9HnuWazKS>Vlk zRjkKyvacmw1ad^%#dU>Kq3f0loxXb3^aKeqokcJ-eb0;Llw=8}1Z?xFJ;&TL4q-UI zz*3jUPaH;thZaoH&Loy;W11|*E?D3a0mn{+1Fa`+)MQSrOejM&F%n$!B=qB#$hw~0 z=ON^Hs#K{;^(T#mVaG~TvY|#tSCzeCcCJH#oMT*5)e><5`o8CQ7he58cCisN3+W?VG zU!`Bx+ABWJ&2J}X%8!y~Y*(RWKd)YKC3j{u1nUlK!MMv}R>9l3*kA#c@zmRn5PDu9AGr+ne`7dtnXYlrec5ACR&_@U6EKahXt9KZFMKX zbFDvTZV|Z}Mp%xDhsw3y;d7WwlM{&SIC>Swt!KC>N-FX*S2Dy`k&XpnBV2=Gpex`I zp;qhA`iGXeTtYtc65lt-{I)FsY877ev?%eovKkIfJ; zT~mt?cX^fR@5Ky1gz^t0p6Lt5)_}(as?}m(R@CyocE_E^Vaqx28rl}(K$OpP3P+b& z3oTkrI(8pg=I?NKIL=3snAckh!UI;UQUXgN2qQ89_F2xxV~?^k;iS%Vf*jJT#?7OrFcgvaF!{OaiZ@o}hXE02aSg{?%~TdBSI18G$3NTPT$Yq zd|n1m`db+P0HUw2JK>-CCEu%S{7cpGPxgx+UVV$+xY$gbWQ#MwF37=eWRodY+v!Fl zq38o`^69VVKNKW!H*{mFPwf@^KMZ@2<{gV#8r{iye`L#J@a{UZTA!Ihk0@E>z={@- z<0mCTw}-=Bd_TRo9_M&OKHlqX^D3T*?j*BwEK8ii-scq)WRP*q8~n2}J2d?fz1(4T zqMuhxWc?b(<>-tEP>nf)zh)a3er_H+h)FF+DyML9D{RAFF(6}BQ6St}Hd1#k?@NuO z;~Mmb3lKfz9gZ;!+K%_ZVH=ECo?_j7K4n*niMaVJTjU@x*+`;DYL&=ub=pH2&H;Rk z7srQ&y!lQr8gSFQ9)4IZtwvNC^6FhJKH%hdRIgR7Ee=8J#=Kv+i1c1(V)4Z@XLMwf zu}gxza85ewuY@Gb4O(QuhE0umVYzeh07y9w9KPL@^)7ywXhFri(b8GyN6p!nkhZo8 zM{+6c$ja5)N9tAN#QjI3=nAVI- zCAh*%R%BUZj+m8Pq??Z8xFLP3``#Lu+?AQkL%QP!-@k6NsnYxX=ttyREllY*jgEbC3xu$7_;^axtWwcM&;X zX=pFX*_j{HzDWt(n}G+~Oaeb!Ig{Ri|Q3KZN6|aka{F z9_)c`)kyc&X#n*Gn37sW%9Taw=5<$3yM<1o^`ngQ-I7l!or5jCOHN9+c~*eP6h$(y zp|&{Vg{EIx*4++KT#$O7ABSCY&xe)S2?Iv%mK7uPY2;A@7{2U%HC}zneqhNT6Mc9- zA#C!0Hw6pP7!q5NO7jR(299sLJ6Eb;Hqnm_dOjb)7+nJKrjsCcxTZK)cGWi|9-OzW z$-YSz-5Xr5&R4N3L1w*k?MlwTM;(@7k7pyt9wTrbI^nS+Zcj!ggPRPp+Nh08!n~=y zMI{>_jLknW99uZ}lC^rZqCYR~L{7v)*(@+J9Gvy&G;s_IUl_!3lny^b=}KZ(3kaPV=S+%E=6smHMZ@(#H`5Zfd~SP#Fftr?pFw-4z)*?dDeA?67cqPT4swD74fC zCkN%^lO!uNpqBxL(nb`VYCYsx;_=dZwZork(j**n#q(JS$@bN#XMX2NE_2nkT8iA3 zC3=>rL`iRI83~O-4-^AG1FrFO-L(DZ1a2g6+Bugr?FgD-&4E=m(!1E)E!n88iR3n{ z+;Lqbo+#|fK3V~duF40aYI=q`YHoooF^OX3{Ec0ObXvEho`&=UZNo}ak(7^iBpp~snEIV_UK$ty zQ~D#9YS8WIWup9)>tTLNlC-fsmOw&Fuqw#0I})DjgYA=$2TgKJ6C)_r1;hDAHsZIp zfCuLQ{JFDD;$gAd*LiMHwyzV&xUp}FlryZ+lvHhIryVD_t0O12ebiyS zapo9pBT;J1_<29hjugVXMqMgpD9E!kjz`UrT)*YjZgy(2T!)htIX+@rHKSf3<11p+ zh^kx_3JRhE&gU<<>(JvalW;~M$N)vLZT#-Eful%M68SGjrN}|;Petv;eYkm|s*}YR zwH%De?j$T2?kIZU$jXp^RO`#UBM6N|NCQK+al)GpN`NHbK{;m1AB`Zn0lSC3ao4C&r_wrw5gac>Kl2GX4T!wnRBW%8pkM{*As5rQnd}M zH)691#C6a(Y2gk*^px7gd;^Vba&ov0vM}#O{G-v#xxf*SmoPqMPnECRyv5!snVMOQ z@vz~!IghZ@zVhEIX-;typIi^n@9`KTPQ|@YHo@--jmI|ZN@Gm5o}W*oE7JRKCnZ8U z=FOSl5M4;V+sKKJY>bR5s4Q}QPvfp=O#Ijm@g845TNuzt;memY)9miqnoc$OPDV+p zG-$F$Vol}jD*JJQ7~#$UJA5)cPPgIsCkEu40rN|3Idr;LrU26#`WF@0+^;FfcC5B9 zMe|K-=4XrLNhukbnljcI#siQybo(b!#oG|NV;K_LMtPmXdLtb&a>JHOdI>M`l{p?V zm-V3k8!b=5|eX%N?#baOzjgO}~%*sM9A_<{8NIksEZs;OLot%!M zYg(@gBH5WzNaBLC100FASshz&Bmlimi3pJKi2w&ReqcPvae>77R*x;k#X_^xt!gU~ z1s?5FFS7Ck07j0HdbXg(a94MpvVA`~ua^E^RdKooT{{*>8+zYxaxzqV-ziP8N`)$p zuthUNhnjb8rcy%fUbtPl=`)wR7UCR|^7IwYYD7rP;GZWW1lGAWhSYK`b!Z{CHqUAv zyQY*Y<9lZve$y_Lr6V0bH~{?_)m*@*E@h{{@{}%7Tlea%50Y<|u`C1Kn`;14WEmuY zFamY!^y)^L5Y!t+Bcpa3&}}yS_j4%6bz8A#mE_M5Ic_Xgg*c9F9NFWesKuZgc92ZF zj^{@KkofD;zhdQ%`2t0o62LZN)1FH(VJ_$-7wIR_%&O^ZJi{vUme*~4xglskND3O@**8A$z8~WK|K-WB>V=B5YFYVXk5ZG0EhO(pk>k{I z^yW!!*`)C_Ri&AXq_B@LgN}^D&&wL;;$%g_;2nfBHqDD$a&~T`$=2jtMQN#W5s2;a zQpdXAv1R~C7;TAGNLa*K_a2#60CXB(bc~>783G5j&9mfHBGMQhpDB8*yGg$86=ZDEyv9&34(GzKHUlQp&4ejqX0yqi>n0 zvhZ-#vfSTp$`xaKqD*^HvihP_*ktz<_+zNoPO)m?oD0e%X<|iALva}T)}r2^Vsq@; zqnDGj$kU&i2w10f(t zEC_SmBR{Hn@x>!>85n>>WHX>7HXm7FFEh$Pz{M{Y?N#NPTNWbrg1*Qk8(E11A)I74 zPc3j-zbjgF$kPq2oqUa$M4}043UcgRuMbM(cP&9j+DlPG1oB^;goU6`jN9ctmDx8;%}ZS4+ooJ=4oG%wuU|u{5=~K2mzE?bdjecRb2ZttL=e zLHjH^bk|^uhi9*sWqSJ7Mj%rPSC-``8B?{YayM*45#&~}E5ls20X&5D(-Y3oj)fLL z#dFn;2C}&r!r`0_rXA6f?dHw7hSj_wGY}0wS+dwU)ow?W<|gh)XKlAR8*vnSlD6v5 zwl^%YAXDzJA+{g~8pg!SncX_1cGY7cO);PxxfN@Q?|w`1=O^5hQ;q9c3HQ${&Y&%F z1|o@=jmsFzsQXygY-4j!xmRZAe3C37qm?t-Rcd_2SF3Nf_?i^HRgf)-8AH>rGzv_n zBByiVP8pbzPeH6EPOU5nEh^;M@1oF+UGh(y^XyPha-R*y!%D5TABDw)qf8kin6L__ z#Dnd~H)jLVgQti(jv_&{f*jQL)cLv=afy+0o_>wps}AkSuKV((&%)A0lEu3z8cNcG zloGU!hV(M}uzr9wRt}-wf+#|W+Mdrhb8@5wYw)Ys;jdiRY=s} z$T5dzAOqLKSo^zRgCI_P`)j!?P%;FA%W8io#CGleayleM&N3>w<#|VyRU}Wh_fSZY zM5yB(M?u#*t6XH`HiV2r?i_(yO3;*ELc12HD|T6C;bXs5I4iVyKa{arwiXCdXrn&p zMl4E55W2W+ta|zCc#CAni8Og)H|BhcqSSzfE(r9~%(ZXNEjmMvE;mDaWD(B7RYP4Q ze{q)`QBjbtIzNW8!NiUS1BE>_s*M=PW-{N%t~ZO8TPj&{S7IfmR4v!*URU|u82l=vvF~_Z;U6&3drK^&gCnj7P~9=`*XrNe zvPt8A(~Wli(R??@v1@jIvFPru2fM%4@qdX?{{S_MUf;r{_(T4s&$Pa4;xFPy)Q8zv z+WIx&BSI0O2=f{cF`Z+87j`6z5p$DTenk26LcaJB9|{g!p*tp6#oGY+0#>60TeK zrU+m=aSI!odz@ui>(f~xS1GM20E8M7=kp3B9s{P?T2~d6Sq>-m!&IAciN$n!Jf5|0v8+eP(XAIHT=FvTf?2zFk(B0Z98|6BmtLoIkrB5i)Kh8Kc(`uc0^o8n z7(UkK$Df%-og{%r@*i5ulaHFODLk8IvWspwtlN1%s>02jGvJn%SIG371Owx*GInDd zax)$0`NplgrCGVCfHq;DsCKO$Cx)?KouSFRTWi$aJWS`(uOhN-jY!FL&zFWZmjopV ziHtGzZy>Drk=-%OtXS^|9!@Wgy7uo^ltn>NL5{3b0Nay!-64!N)dYU8k41L1_ z=g+rbT1>m0oVv1Ee6M;A3%TK#K@1eR2#WF?9NXY)bt#pMU5;EdVtAw=t_VL~4!uqd z#km;OKc`XoP~rrJq6|%Q6u|VmBrmlJ(B~jtd$WVr=06TzR&<6L5%*0Esbnp_ zIY&=GQlt^~d^#O@+&DI7H4R2N5lI1p()rhhS%t0Id`*d|aC9WQYSndQ0%`Y2J&2(U zRcuI}ps|pkljY;kYE9YQxMe{pZlyfQ#0ZMywk+DJoQofqUTq*MC8R5-$U_21M2!`Y z!J0#ngC60L=cfyCvjQbqRpYy#Cdsy~>mf>Sdi8o#%f`|CW}k9hrLu4nFmO-O+We+2}F-R(Abu-maCHhNzJc#|mxR&9P)Ho?7Q5d2g5q_g+tH zmvSUealsAjk)^&sQ;t})FtA`h4kwWHdp?m&*@ z1|u1AJtOPZmTp|sDCS0kms%wc)+?!kXlY06r@hQeT3F}BNJ9x5acKSQ zE&v!CkH<<}PrsaFa4{mJZ_MS+mXiV9G#EZZX4Xdy&T$thSLG7Sk{J)Ml-W!z6!1Fx zzc8{4f`=b>jOVVnrElC!O64T&PTh=gR%B)vVao-N6@CuA`K--t@7m&RS%TA0b(Km? z5>@$$m#Q%F+B&z{>8`7=HsLLCB$i{5-lhgcw2_8>g|B0i<#~C%ilOV!;hnE?Fv>l+ znnuecyN{qMk(P{jldgE(oUOR47vwT@t_?NJ(Oc|}Ld>vr)>%vkah5yx^NjZ_u0ng%D}d4&d3%9sval## z(z}F_Gmxw8HqhxOnO8$!3~Wsba=nFT1z6xMe9>tqk4WG(P!flNoM3^V-RPE znRY3`0fU85M@(l&4`w1mB0Jo-t;sAOJiLplu&pY=eyw>gO6ZnqaolcZ#MJ?7sx>A?@wYV&$AMTl1PgUrzzJ8 z-DAgIoqRRP3CJGqC#iI3b~z4TDwCG{X0=K@ZF7{Hr&P<=2pow7i5;aFJGsU*NX6vFz7@mNN22=Mqc+ zQUiY|>P_wR1XOL!wuB3A2Uji19(m#9D**)`kmWfUWuEPn1tXrM8%tS>soTFebk0L` z(&8f$1;%IFg;l~W-6g=}$~xQ+4`+|LHF;yC@tEeL0j(*8=TaGd^CJKPQP6)Y2UEjH z+dlBiy^zJnJ{@UXiNmg=v0)xRvng8RE+u!O1rn`wn*7P#)O)jv?!HcI?zO5{t?yE$8m`&nRVtztQ}!62Q+b?uja+Pq2!a|# z!{y6j%uK$Kg3FhTUJ84hgaSYJca(u6?ivp6Vu$9>syB^K-X?Lp54=O`Q_~vl;CP@; zla5}4zhc7VNH5ErF0+{Idc4PC*r#s2xy3onjw&c-h&n-b5K7L&2-U-l@kx&Z@yONA z>@C|8i21p-K*qePw6||ms6cVqvwqN_hw|S2JKRM`Qa(z@Ax)&Y9CGAA2#Bnc&m#o_ zHd079#(#TWWs^Iydu;W}fOc=iTw2@ec6RC57eQx?;UKe9lDaI|r3}gPuvEtT6Gzob zlZFBCH?bW&ymiZBZgpLKA;l@HmeszQ0Ad&&`EtlAUBTTw{oGvV0ZWEerA=XbEycl_ z@K+ITEhM|WED!>x+|KOyYtglOcL|I@h>y*PZ5wL%o#kNBw&d4rjbwSf0ZDS@UMjB{ zdc2D_3CJWyoE6X(dsbU*k4V}Xqhq^q=oc8*4f}eGL`@matcb^}E`?D98946)`HFmWEYVN*K9sQ|41lFipnap`qSS!4%uZke&Uf@JN&O%|8J{w# zPNx-Dn0Dmlamm9piS1C0no!aXqDHV)Hw6AcI=^>rAZwcvDg|UY-CW{k8X}v`4^>uG znq9HL*R{q*IVVfkEHqVZt$2)4zFJ^oQvEW!x}OakNRF@48bd!dDmL_`4OAyjL!N4; z8aE>D18<0tnme(<6g6dsGMPqDI+Sj%r)v#!Lg1tz33E-VO+nSm)KM%F&1h4xPR-h; zMOlTV+wQ|717YQrl#R_KTl0gA<6W@2edB;cO%FcRkQ919CQRd|mS&rZwH?@a-W~;$ zhE<7Yw=GE=gJ6es`yL*jKP^<_Zs^oW0AWl%TvbL7S~)e?sdn(MTIV5N9%k(D8%!2T z(1@h=F_VX(j2@fGvoo2N=7L^uV*CKtjc^Kv*#9J5LG8bGFV8?2x=-ql_ zTUfYlG~p&ZvQ*C+ifmmc8^rePUB5Rq%gA{rkygW1++)HKu@=Bxp!%@^2cJ|j8>Ck|DcH>A& zzVH?W$4+$E%N;Zz;ga+|ca`ND8+CZ@L>GcJt%>CO$s=Mt`SPQqx~|11^>x;7=`#XY zQ+fSq47Lrdrq#HJha3F^n?7~M)V1=J*=a%Zw(do7_~Z%#`%2%W?I0Khqzmg|>R^0zq;Jl0 z5ht1Ptp`pBXyeO}T<2p@l7|KOw`}`YIP!v6RZ*u*yEBGc1%N3L0nXu*;qljTCT2qD z{h-{~Zo?&wzzqfme=Ju;!tr#fag#-K@9rrGm3YXkEW#XQ2^^xSF5%8&@KNS<%f`ms z1At73_HcfFWwnTzeO}&MQ|z~IR^%-3GfgiU%|~D6F2Bl6EodUO_mR6SzzHJ+5M)LK zHb4hj9vU#U3CgjSV-SB-gP$s-X5{Isd3r};xxhu<7Wk_Z^IQaw@>J|IaW?pgh0k)6 zg&yPvPNfcUv9iCcFhSRC=vjnBEtyE>`Ezb=R9r#Ks?EzC>r$oLd`EBccP6axSD$Rs zPa^`5h{4+&p%xMXogx8&pW%ezS0gl1V zwPxSu#ST-Ozju&_i)iJlow!~DERxPq*41RLqja#4aLxLve0poYgM@BGT>_!?Y-|8- zZMExM986q@u1o&_xCV{;Z-bt+`?&j743sEsXvH)^8Z~kW>O+S09;`5Y_4=pw(h-cf z%_q8TK!LID2j$YfALDtMTC(`+lkcW0%)7(=Zx{HL6aN70kn7O+Pxv{1t8?v@;QUBG z@`u!i*;tzTRp6sS5uph48W1sErvab9c+fr^xAax@=KM4N03*BgE&120;(zTHKD_%E z(lz+@;(K|j!&&M-H54*)7vvjbTI_*q>^UQD{;l!X;XG!zUb}6G)j7G{sOjh@9)0KjB zIX%{HygF1I?c}i5B&W7Z(qdICUCho~Y)9T5MmGk>O~3+lN@2^hb(4>kF$rPFDPpZ| zibY41SfruIDn|T#G8v<8L(>@9CN`sP>mmAnom7N_!RT;oi2nc(qwb<{hM@V3_j18a zVqO{<#2mCzziY;;QcIDRdvvz$V_HDlqz`Nx$~<()3r?mH0G`9URf5rpm)o87=gjQF`Ljl^{5F|I58M5Qq{(&quQmP;8! zNR3~Ykxjyj+@}~Ji4fQ1U=z(iH?x@z(56=-Z?wt>p7KXPb+xFcEh4_8NNg@$Dze3t?h29i>?k6erqN2Vo9=(9!G1`q-#j)j%Yc{tz zZnqyNImgEtL=OGM#It|#FuUblK?H9^#>3(re!XjAQ6hpv>|`1Go|0!wusUR6D= zTavZi$n7Td4GkltYX)>1v)#r=L%*Wl^# ze2?RGd2gMT%rg5`mN1e*axA>kN_vg4Cj4~q*DT-+S_GLs8}>HEP>I0MdA(|_nwG53 z$4sBrX5?#<_hMrjPaMG-Ic3}!JE&q87(0C@Sw`bP+n8cJ`+9L*BHI#1N)Gt3FBM=q z@^Mn0m$>%m!4J-fVk_|~gr4!GU8?%Z|h@RlVP_k@B6bZ6AL=iUwj^6M*~rOzH? zg5$nYwAJrHXd95&_Vy&uz`|RTtEoki3itwd7TP}6w~Vx0oI&oM_B1;>)Hq;D>^n1x z;V$skD@R_mb6lCK!^=ZlQAuqgt3qs3OhuWpOfu&f${j27`^;)yPu=qaznyJtX{f*l zBejm~$4c?;_TZ&XW``|Pj800_tZYZeS|u7ess&GWXmhx@l?oJ6LlK_?t@vq+4;jjg z&(DbH+E+dMPJ64prB9HC-y6gwSSB2GXz%j2?35Fio-CF5a>Ft>Mj!#xX!^C~0V&#) zn!1Z~bDW1+Rsh<%8Df&g&Nf&r@#5~-_~`iZJ?ZI40cacnn8GkS%XMISbk?G#fI2HzfLi zr>CQq3wTUPfWVsh`Q1RgB$RmR<(|@4te`3t;a`LHxVw)kR`~ZSwxNqE*3z{tXO%C zUA`g*R3})8niAm{?EY;pB<>?PF_KYx6f|QTP!5R;J-XOm5JNgwWUjwFmej4cEBW`gZP_Zw* zo!+NWFk;7e<=DCL#&Xv!RY0EcStgf?hCkLos~@{FvCh@q=;?uyaj3I5w!mZ8%(W62 z^{twmA%?w*jbg7Jmhl{RW|1Z;jH+K1(>Y~vlqb)r)I@2JGGRw9da&zE+$1n}8wZ^n zXCKJ3$;jKaB=GV!1XfwL$!_h1CLpzxg#*#IE&8PO&bl-nC%-S6Xg0|1^OcOGEz&rS zpf~yz?n>;i+2v)qR;Lrf5H?eZb81^ln9R?!?a0Mc2a^iG9cg;mnEj{`0mdZZf#=2E zi#tKti6_bOZWUbo+}z(MEhz5Pv-09IDV=2Y7%AKCSdJpj*glBBIBvfkb3j5w0!WDR zwnb~ClT1%4dDZ%}Pi8fOzt_Z8sfX(W1D$hk6tXbi4g>3 zusADLq=Ln({)%?%7%-DDqQ5W?smfPwPJ^ZiYRSY z63H5(tdPU82{KufvX+s^134RdYp}$E@~p;LMm+m_77~yEoR627Z0%gYw?f}#-nB@z zYxgFK-OeRg$bq35VH0Plf3?@tqo;+IM0&Z0&PGQ%Y82R#NyhN4iRmTmHL?(18*I%0lS$yKMxLB;TPM=d1hjpCq6@Kl7f z5?h|h+g;3w>It{Ut`CXTaL@$GL;**~v!51IdQ8SRlg`^{uT_VT_M))XSC5tJM-(+< z8Il(RC{EMqJ$)|c!(6hArbNDI%YQBFNX{mhm#;4{Ta;gnVbf!G+IY78aCX<)3-H;{`B*AQq=5X zhnj-wNm7MxOig#vBvBa$dP;{3PsgW*pWY9=!jv%sC&aeh%OeQHHcZExpK_m;72t|4 zQfn3@79ZxmS>z0+zo@?9=dplKr^{S7ZR)upCj`_|thJ1bFltk!WA_EFTF+@(HDi*+ zm7XT4K~-f4Ws?%gC?o~u^zmxD7_my4e5>A4E9ixI&ym6p@z zC|htC3mF|)4xKgAZbVDoOaK^AVNHosNsMm)TseD5}EvoNv(c)s^<>At|-PZ#2ffZV5FV2i&VtiFlCgFk5 zWcZzQ8@&6I7^bp%rzSZol!X>sU&992&n-+P41y-<~q%``mZFEc1NQEWDo3149I3HQ|9k z!HztMBm-Rj_HwmcCVRvUpEfPCKCO$Q)|kkB3GgUTGtO#xH$ec-!Vg%w|n0P zgIW_!IEVuvhhV~x3BWi$1RYhM45Po%)Z@;Uby0b$7V}1T3y-5RI$SL#VZ$K zn$yE@%b%87%y&!fIQ6Q=hj7PMI$SlOaz)=r1kv)t*0a4a29Y7?pV|CPPxm}lKIPjS z4Xa0ph6VQ*Hstn6loB6gM<9%R4x;qL%%QXgr!`-HYT8!bK<)E-S3%8k$;9^;BSNI+ zy?YH1zjCBsXi5P^495dzGEea8IGE_TVG;yOdm*`RMX>OUh^WY{YA?vkb#5;fYe5@} zD|*2%FU+p>WqkT}1>2A16Rc#=i^mr=#){x%Ne2cK_aY;YE=4n*zVuzG@v9|DaYQFt$Vj(h0O$iuZlkW!@U$xPODVTcxr<3&r(N^Ya#75w*KXhr z(~q_@q-|WYD47oIf$9aja7ty|XCEP3Jlz|1et(azWxb&O?JDvehRm~8j6vu>ZMOZq ze{We_f0_%$+zk2FmToW-YVFxt`jt*c{oSfKE=Jsz8DL_(j0p}AtQzfI36eqxC=W!& zeDv&?#7h!cxpc0ppqBxgD(`$e>hBT8aE}dpT#Ro@f=|A>q<~wqG7oV>Y*MH(j2x4W znwvt@TI8Qdr#|7cd0d|IZqdZ`1d&QC(Uu2Rf=R5{n#tepe9TG~Uu+g0kQdURd1ud9 zi?NgdfMUn14zR9JX*<%L3iobXtZh$n2z~xeRShh_763{Vecs=+P6CgHGIh;na)Bfa zn0%XEW=5ddEUxCKW~7sF#ZlNkZ%SX(u%iba^RJj*haNv?$6WvzO{BrPYJB-C5)vAR zN2yScnD;qeA}TfJvo(8CELcsJj_+)#Fl2g&I3MzLy{C+T7>%E$kI0~br0OA?qpfs( z``Q<%e3Vuu`5rcmh9qgFCL}WzZR|lLGO!E)$m^$a-N;*4q~-3FsjuQtZ?M0;rN~c$|`ViU_~5LGbxdjeYar1li@lJZkx< z`yDw6xPC{NmI-*+U;30*UDb<66qyHj8{{kr!CyZeW5rsOMlKCs3Z2DiX6JYVj>XjT z74BPt1fvy~q)QqNEbQXM(Wz4#vE8~%<8t^Z+I%$;7cR7<<`SiMHA|3=(RFsq~n*NX?h^R^5s<(8+E&Kornjy zZ-!`~yBs!;xgBejr3eI=^%#Q6Hv`iP*8^8#`Izp2OSu?1mmJu3B%;^d>` zXIVLG7vOUYH142Zl#EFngiBdbaIuW+lz3wr+W3>{oPZ#nk5*l4I01+h+3DZ0W!mO# zP~#r-XjW>IwYb({?g+iX?7XQHj-`n^FmMypJavR#(GUg6=Ge3?I-D6^SgNX0zcdSg zs`Ta(ls8_&I;8 zbM2M${{Rwy6hG64*$Wq6OuPhWLNp;BV?qWiv*3T!9BBGEZ|JM*&iG`1_Z{D>Yy3;q z@lW=PA6|Wn+IwpAJ$bkeRK2b>CiE)rb6RCs*uRbpM|N2}k5R9|JWli8xe1@rlS}n` z(#t+wKeF)ACJ>Zy(;k|3uJJf1YjMlPMKO|YXhkn@+=w5(tO$xVMPE}AzPDdI4?Rm0 z5o}AnCNd-SU7`TQ{;}v&YSFZZ?3DD69Yk*1lmmwmHD|{ceA~*VAc;$Or=!o)RS!G(uPw@} zag_s6v}AbrdMzs|-&U zx<=%{%9c)nys^-D=|bRua9mSmE}K*-)G$0rOA?=a~hq+ z7d!Evr0cfd4=;M|0nLtYhoxs5fU^QdL(k|>dfc5_Tt693N$%8&31L~QF3Hj(52adF z$F&@v%4{(F}Emn14$r1I$Cl4-7|$lCWA zg_cQ+#Dm0~Kv)d;up`BF>G1Z=`?|htDsaM->NQ;VrKC1|opv9VuPmG`IA?jHTPrsi zWhNu5Nh@5cN@u6Gu7Dq{bbp>3^*=ap90XWem#ub8fDx^BhKak1M+ufp?O zZzCMno(;$@#${fDMfIeCM&}@SV_h(uOh}i`($(LAZN(QNbq2v|aZ*E4zaz?gf}1>y z*`t1W56nsO<~Y6fW4T>a=l)Y|>DOLy(nMo%@NjYk&RZ6fE`OyqNXIflvsPDZpS=aZHTY&v%&L8eE$Ib%EmJp+PNWA9i@DT*PU`^Ga%Q<`GM))yX@QUh74b+ zP_aVq;&Ix#@ijp@{u>PMBh@XxA2l>YBC+&uS@y+M}KCG7~5q37<(&h55KaB6nsV3gp<9=(|Ltd|W^XzKV ziqp7VvC;&Y)Z-wtXRn66Z@O@tG<)6olh6idKQB_@j}d*lS z87p#pj~a}X8cA|J#EL@9f?P6^Po#nI*O|o1&A~gChMKl6+YNTFPRWpHlKlL#R4)5c z*ry*WZWiOEEeb+c*|zUr04+oZBWq!c`JCxlu^`tRff@$$1YNkrfUZ9(UT3;)R&3Pd zqM<-eVV>~`CAr+>jlSX)GC5O{aktVu^`u6LxTzgH=X&I0F^#k1N#-XT<3_&Pc#5FH29&16Esx-$Kje zt=Z)pmai3gt3fg(wRojXj}upv$0RI+?1Bee{{SmGcj+S;1|w!1{&ZU(G`sKftDIC4 zRiau-#sfHxz(}^E#*zj`&T3~{?F zTCy-_pF46yYSlZc)SO2Y(sG7v^H{q& z`)cy6dt?s*B=triS3Z&O(Q@QrGGQYoz?u%K(QBe+B2xl8g?y`*xnf%PXhUuN+Pq;3 zVzR;|p3R~X4dwE45(U6-NY=LQJV0ubsO=5rSxzoV<-K%Wv&0)c$yU!M$ux>3w|m_x zeb{3M8^G%)h65iQ^y#dv2})v8z*n3MdezON1E(B1e9HX1rOCLrrt1)|%113&y~R5b zPUlnwfXXStF2Ii?y*C1!fYuITytkFk%iTPU*=f>>Ku;d!IO}0jBK7^H zSy9wr0;LE)NE)lRHQN9?KTaM{w3WEU%VUV?S?x;8^1q6zNfO!i-7Z(eX%x|sxk>Q_ zV;S9y9BUhPcRC!haU60-R`g^L;uT!3+U>>^0aJh8pCr>+6Zr-oE z0QKKT`4ySFV$UFrHKq|;j^rktSb~>UfP2z~ToQ}7#handtA&K+Y??W6BGuYYH=Q|7 zA%;zlkaMhVPlu=6_F`T>+flW{*k5ytlys0XmRXWdw9;n*k-a2%Yof@3wnRfr^tc{= zL2~ghAcATVf4x+wBfK(uRIQ<*&T?_C`)<&)O%xFf1G${+0FO#_Z7TrEGPZlMY=2s> z(CyNnyVBHikn%dFyp8nYql@Jeim?`Ijz%N}BtXJspwgeb+{j633GwFHKr1fLxI&+1%g9^Nlc2%DP;tOOeoKWv-|%5 zx}~`HPTIdY^DTv#ew9xwHY(SQwK+zbZ z@qFmF+q`UX{i#!&qY7QO#t&|8I%gH8oj~8!@NpqbuU`@|oNDY&GP`a!8~|A9+2~nJ z9V8J`%htT|y^i6%Z;PnZ61N>SQ+k!Jm=9K{m#W0Afg_cbij}}CyItHxivly5kzq)W zPD9ePjl&=uSM-;ras0d5JXK}Q`607rpA~cua%!^sW8Fl~Nsa!>x7tDHt_qle85e48 z=JX^W1Cv0&o%=d_Qq$pLYVc#yd)#$rZ*i(X zQB~w=9D)msljb};b?w>*g@&>}X(8Posy3cf3(UPgecb>*K)}C# zg=g-|)0U~o*N$(Nr35Nk!BWn$D2=E;SM!D_U3^if{(>B<4`4-~gz*EX!1+iKl z6Ow|@3CP`&I}*q3ODxBHJ4%@&XdX2IowtsM8+?8`z}vKY!c1~{jo4!NZd;IB2OGV6 z6YvI83B_%!2ou;U= zL~>Ll@sQw*V1f^Zb<;B|au*;f1Gd5qPo0*Lkd$v`;?Nc zn!KFyL356Rlg6?>)Ge6R6RKx+>|=7bO9B!mte}aKwS$>2B^-`4H@IVDuYQhmh^L_+v|n ztS!8ier8TWNj66mdsSQIqa9h~-JQq4=NiU3VG`rMHssi_>hmpahLe-g>D;5_c@Anv zS^4>kQsiC|Dq6Fy0-7=s(}cD-O2qcg#7r~7jN

    z#r`8h{L&qIUkU#J2QT$5eX_oD;!om-`f&Rz7hg=g1ZYAuAs%Bw1}n7f{C)+-Xa4~9 z-_cjsoAA&4j_=jA=U%Ug{{Xbu`t$5xLH2@iKh>u8C$SxrEGDjSVnVqr+33Up>jz)Y z{AHo{+p&<5dCH?M@u=I(zh|;fx{09fjCq3A=j>SHxc*YqT*Nb7uCQ_mZU<27B-r_7 zF`rVa1CQk3llrG}FN%dDyp?sKg9%klOt|fyosBYd~mCka!ryC{I88r2xV7j89iS{?(Pp@*G7bu?lg& zk8-e%oplkhAU*ZM!RfYz(IQD`=gY{oxXWC~pw#(S ziTMU)FuW1_aMm`{X4vzVF3P(XJ_*xY_c)WFh=L)rp07;Er!h!EoT}bz`PN?xVn}`s#j{s1QL)#xX2{28$*9=>iBqF08_gn0k6({I}nnBI6_GSoDe+3bqaa8`vKXns%VY&I7mgcl2PYSh&RDyMLig%vPU};#;5PEW>)W zR-S6LAe_bR#kZnFT|r%nG6F8v@EY8}-6m6$jgRDPgRDsqEfCZdZeEqjcISHCwvd|~ zL?0!7lUBnnEj&Kvh(- zYY2MZG9(q%Qa}Qb&oqE2W__628L_;LbK3wx+pe`1V56NHVrQ~^= zLJlrSL>w)8dnLFmGL&c|L71G#j@yfUmm7(|*RA36wFuFKo~5XI4r?2`2QBL5dp76d z`0g4jzRkWCv%_D4qad*)ZC(jdI~Szh1g;%a^{}is{W@bA!a$w5FGhyE-rSVBNkyIca}N7 zKs{>OP2^b|{{TI6j^X*>mw&F9YRETt=zL23bKgNfdNXdkDeDg+Wg@=VSx^7 zE!eOgd=lX#Z9CO;S7(C%0DW4P%z_AIim8vBjZARTv+AmiU~M8u1o#f1?*j)tF|BO~ z$%MMkM^!r2&Dx(Xbl$rz9=|VBwn!d<#!(rWReEK7PNPe_A{c>*$K+OY;!BSwQq8Qf@_n--aDpyI zjXNJJf8~QK$8A^bNZ3Hk7a1VqDn_xr!QFt2vd5d$YTFe?>@`%e$y1uo;qgx<}C%p28;^T=cSEUtoCRGTa?~^1h?2>$QuAAI$tx*xsATrG4xg*0>y^+$PLdVJmqx`CgU||W%`=?f&ne8oM$;Jhh*B;}oYDg; zj1*f{Wr&QcY{3O`&7PXOU_@%wQ;X%#zjrds#J4Vmw+DIJem7?a5U0h`vUtlgn*uIM z%;9&+V|7wj+XM!|8%L)k>Lm|#0dhUjmf3ISS8g$pX;kC%Lc7nchQ7k5AZLmy7Q@Ka;g9Fvq zMccXnhz>>%=u`u|cIVm^sJ-j**L9obQmbt+!o%8~Z4Hec))^aj9}gWXa-3o+=Vv-* zF{nBDm5aA2J%sGOF48oVT}LHV700?zV;hhV0)jS%K0S5UD9#c0V+XI(mhHpVu!)QN z#^&6u*owCT!;he9FE0>MZQ7k&mXQ40`PVkpT6sn!yKl#ZvaYj{LyVSw@l zeyxO;hUKWk$E`j?k)|!!y$~`=E4UI)&Wy(_i~`|LMd|R?(UEX8xxxO3s)L9m&>T1A z%WCBhd2&2&b@A!RLo;?ibZz7Jvn=P0<{TBTbqLSh%nsA__3Aa-!`iiThn=VIN4!3- z={ETJLW{E?f-xMJtzW<+Oz$(@7FImXuNiwCu;JBlkOJSH- zpO*FC5+>Ois-3|Vi`|zs4<9SX!xhQJ;``ttPbStX6#{;jSrVZ&xW9x!^^~G+)^qG^pq+*E?fXA1V zt=|0Zh<^{M6;+buP2p?ry2*7`|kU`}Mzu43S|9P;u770xQZ zA==Q?sv)43>&TS>lVmk5WEmkVD-#hXrqWIc!01M`otu-oE=UG70oZTHubohnM1V{A zPRub>cz))$d$Xks^CvS<%f<3aQxoh3cangD!bJctUn8uzhqWpnoHpf~m4^#A8csz) z2LsN0{cchUb|SdNph-)&u!#z8K_d_kiP#6}&Yh`FFxCNKp7+S}E~BPHNg-o*jF575 zBj)(T`B?4mt74UxSpHX(P2T#-$I{B+Wh5VHbk}U`M3JQTNprhm%G``zGQ@d8v%zxz z03*xRw`Rg$tIL}4SVdM5xrP#31dg8Cf!P!6nA0KIPa^7KtGDT|ZuV;n1h<(_LOL<014ip%CWj&-=D9D+4z zjD;gcm@70YM3@Plfk$5tQO-2I*|sA_j{aD0T3Z8EDz9?Ao@;VEedx*I>$D{Ct7H>B zh1yFJot$OOqBR0AMPcP@_KFUhT*QFwbI3b2tcG0E*^XI9Q)ud}L%z+ApPS?jK7 zOGHkI6Cycua=`{JV&j;4RbR|YHE#CpK0e~K=GU_ZNg+eZ=-%vXp0HTH0}nBsYb%!_ zD|!jl08dLh?|&-FF%l*4SqaN`9}Y!No|CyK!tV_aenmXpI^ihouK9HJ%L!qWP>WKF*wUG3JW0c z+D^CofHuv^k_$Ux`zw%HPDVY|+Hu!7`b)<`{_7o#w-?A)>ao`m?1}Cpwb83jF z!_Q1NZRb`bWapDEZ<6G>9_qJ$@J>VUzAkxQrOxD>685b_?S-oxt)FfZSgDY78uXpN z%?@R@yX&)X*^0_m@Bm?!?Yqj_?Rpd{-*_K|ik*HA8}{Jg<}Hb*off`iZ0^do_TGGT z%Vdd4W?{=S7v)TP7V@{IAVlItM_-o(SB~d7?h~HmBEJkWCn0H`eky#-ty-G`Sqx_} zvgZo<@%W65C>dG@RCPxQ4X2-WL@aKRHZi8d&)dwkd1(80hP{5w6|CPpq>$R;BBp(^ zm1S0U5|B3okiqfP|k z#I9$Pfdv+v?sCC2fyp9l-rTQ(J`hP zM4rNe$sr^Xr*;dU5Ppquhcj?p$Tj7bORgc{#+mZ;Dx6h15zB9liu1{PjtyGxB4XPN zXNzO)<(I6uhD?2*QEhf#w#A8|t7IP&zXG^H_i}UVuVSxXw7U|FadQybxmS$jjY(pr z%)9OUsAyqR11p$g1&&DSa#yG)U1y2zN)veswL_Y@H0GfyWfL;v9QG|vQnkqW$hrA= zIH<~oNUOtA(nIc4uOHpM#b$A_2i|+51rE49@RUJ`706}JoqVfXP4h|VQ_S*9G}f31 zZaT7Aw`mkCmD(}7vj9p17&!q>9ANx)h3OD>kngi`3sYWhRq0l^9@nk1EfQq&oFJ6aEfg>fHNf zeD}nk#Sf_uvKB7BnRp1$glIxM#)J%4X~1Xj9ycC1<+1(hzP#Utf8=+5rN27$d{h0R z$Jd`?_Up+pfyt7$yaC8YJCp4w$r|LIt6&L^ z^b3!xu=awt(j-ASk1j{dRa-F4R^^Iva#2re+KH;ku~gQY1rHQ*sQbOeMj1v|KMxH- zluV1Yd&0Oj-oyw}f`Xj;Sy1e^<*QA{+F2IoAi{fmobtBcny(=qAXRBS)4IQoE$jpAx zWX{|-RqOTX_>Hh59Un4J*Uz|9Qu%J>q7ftiZP zq=s*E!5nMP5x|@a({j*^Sw6qXO0<4f6JL^&QY_47WoaNsA)njE-P?g>CkNB2xu!7z zjSUDm0qaP>x#d;A$;VzA(^r}`FUNsrs>y$_uux2dH zL!V`OQU;v#d}=b~%((7h`L17unrcQ!V7&3t=4=)|^_bLx#vK0uH4JNyWfbI-ldX;Y zF>#RRuFi@&&M|Vw47qJNm98O*gmvPw@ZG*EY~tsLm#ib&uCk)A-M^?--HoTGk6m(c za+GDKP>>n(hwEBFrGRSJZ^*3jwx>!peW>G}(N>BMK0?Gavk>Ms1gLC3jxp&&q#H~k z?gd+%=h(5i-6xkXTIRV+aoFLkSL3Ti1@1OTeoHYnL8!t4o@< zfSS?w2YPkm{``%4l9S67?v(V>@8P@CRt^-Rpx0!NnrpuQ{%h)I_x}D z<*MaLZim5}(6Webk0Rs9FRJbj9d&vy-pBBew%7&w_6l({3y)-mq%X6hHC4??ewx?{ux z5ugT%d^a3S$V%{kv zB@W@#5#~G<_*;<^KRfhKEtTq3!s@I^U_AJ@O2WO#@-_RGbH&F_=OJ+fGLqY=P^tD< zFgXO}^S7_Z8qUSDDF>jd0l&=Itu9F59lWb{6`{*^^=>bhpgBQhnk&m-7G0rO$2y#o z8!iaQIb3I4(Uh&rR0$Ff)rLN1WwfluPq8zM0BV^c%``%bmNk& z@-okQ)t3nbaI&ivo>v4Q0AmBh^w%YuH*U$b3im_#Dd*U=fr}DwU1tt^ejerdxeQ+1}$D{c{h31 zj}umvp334Za+l<*#MrG|N{|8b7d@zg#)*!Fiewh@@$uFsQq*;pi{J(%9J1*&R~TtM z(DL7a=Tv)xxZ=Oe#li7ZBI7t}5IuV^MzNO;QwqM~?%u%qiQYlc#axyE0N*qQuF_6! zi&k`vaxPAF?8tO13q9A%M{@Ebt4R{(-Dt^Zes9}USB#&tzj!-;<$W4=qSOJSCM~-^ zm1A<0R=9AryA5emx{%bXJTGo!D9a_w6Bdysl&NJQ$5iR!Gt*c1i`8M4%C=n%*sc(S zWDh#&iTp~%-eQ!IOB77pU8u-440DtlkO>CkCx?RVBf#sN+ni3a!Nx~-Z$hg^C8Bxu z@(H)3?b;tN45Iz1<&4($sqaUX@%aMaI)P`$ zWjS*z{35?`{NqbJTz?rtXrj4p%nMy+mAW&bi0xGXlmi*gvWyJNkSfINj$XA;lT90qJ z;$<7LxrC#;^qGL(?w!CV4I}4KL)$CMUgP_DEV&%iXe+IWQ`nkVP!_IPK`JC=Ron+g zW1VtchrHq?2nuZ9pZ@?aQqnT_aW7D|IqqYY?m;IX0QZu-Vt(kiAOdM-b{p%XE-<-J z@_;_qPma27T_g!(BVKK%rj5RS=30o>eb2^12 zslaZhA0G{IhMB|W`By=SfBh*?{aY0;cw6FSPaW%YO_;#mQ%5IGW&Bdj!2)b%n-~6PNQ4!5fHhi z;b3-h>snm8NTyAXELM+b*W)<;GOdm-MC4%QVOuuuoSRo;o2V?HZH*(&7y@(le6(@* zMYo9zV@{2pl&r&4Up~)C*|BSOuM*ssaS7#s+*&HOU+jq4B4WYva6ncgp*=S1pMpA? zpEb<6x2JyCfFzcB1v*I%qlC9l%{0EOPF=ZK+^vtT$uFwJ7&-yDjKrk3Dii*o;lT zoJY;xrf?dBZEd zH0s4iReuBI=>8||u(umd+!TwOTaH=_A`BFbV{_u^~1`M&%zY@S#41GHbH# z*MDerREFZN)LG;b%W;xx5ZLzQ`?tT*(YRVzgHEmH0}mmEd!P;h}I0Tj0A$n-broMT;F9L2HTsehU_5!kZ04yFSjLEe*r zb5^%H%^)U($heVr+5Z6Mz^+a=h4+J0 zX|tDN={U|eftH+BBaq7)+HPxzpI}%;YZ2w5O_)-vv>u*$8q181kYL;DGR?}q65*V6 z4Vq6nh7RWBxd^QO3iH|IT_4(lb&`ZlkW7tIMqR~}V{jPXJUTFP6eV^6a;x(M+92uQQX~Uav z*rWyx796qZTvv4QVt(M`PcH5Aj`qt_stJ*6qGq{*GlIbz21e+5?mB!ti82HbDVBNl zj26JQ9#z#P$$4bptI>pBYsOce=@LUJtm9(_RotW@Vtrm1$ksOPkWHp?{nP2{S16b~ zumdHZ$MJRPUgjf-(*FP+YFeu`)J#ay)NghvJ*@bs3<*6*85-U(k9q*OI5t~x+mAD+ zC+?F%;I}%p+FXYsrZ5mxmy+CtBmt49oEB5ps0Ba_GvU+ATyP{zMim%&x{|wWF_tW* zwwz_&S<%>^mS=d1jF;+CFz7#4CvfOg_zY`fb|jOILy+XlD8R%HT%BKT+N$rzNTN?Lvl2*~fxA@xe)0LD!$xj!rx zoU07H2P7>#I%f58m{6e*nDyrmD}Tte0Al{GKka%c>b2nKAhK~V%m}zPl@?{G1 zQu2K7Hx)_P$6Jesh?ZcjBhDl;%_%RDfJVkr2iez5uNYd4LybmGcBP+7^D7Y2y&BWy zm>y!xz`=ULIg(jmmwXEr+y?-9K>%Q5I_DRsIT(Y8<>*YpEZ8^7tnrV;J$k%l-WZ>7*+#B1KP@ue)}|tj3V%4%LgmSmf2Fl6j{~ zT(rzrkeW7Wnj(q|CIAPbkau~5jcYPYgpSUfYRf=rOtMs|{w3~L;40XfOFXQrFDEgE zD2!@U2;q!%vB|3C1ppxA> zn`0oy7FZT8a=!ov$4ce6#sCA}bMB+qNOkCZC;S}0)w%Y{`TqckKZ+kxA7m_DeKPP7p$O1~d5s7duGhE! z0MtBhTy*8S`Spsvyx)eu@#(Jw+>x2NFPv%Ey8YMzu>nwmepVSN(&2di z7nkGfBF)EC<^A-TVzL2Y^Kd(c-MAHEzpdrhUc=fF7Vbpi??SP~T-u14V(wn364 zW%W5HEuFgSBv_D(10rji4o4444x`@9Ti|<#y1R>$zr=HpMmdTV9pVde%^wa?HoeznNNDp{49kate_1C1i|T zWF_lIARls@3CkP>Ju~C3XE7!Y#MJJlz^U~bIUT#!M3M5+a!@*;H{vE*@JNfY8TL8% z7?v1NhptD_(&K%xXJe0fr3791^al=+?1# zThp6=@SJPZrX&(b<+U$x@|5R}l}Tr2p;|T(4z97r$0u}ZJxuI&IV2q89R|6rMtUkh zF)ZBmbfjFk&33a#+1EMVKZcT7Ec4uCam&MTR)!YQk|hj{I=cq+1k6pfzkgj&;bsBT zQb;XI=g-a5xozK!WwUt8meoV%`8V%Rnw47R+X=K6f4c$*l%dD!AS_V%WmjHknUE3% z00Dss}-(2`8zcStK4n-petQHF?>|?CtK;gD6>*TQf&2{8G#oAm$=@xj1Sr z>eZ}xLwtLHCMAdM`(=jUrF!Qbm!)hG3?&fTnD5L3P)19R%%`Q!-o4!X>fb5J*FC+- zcOjlddZD4=rixYy1TdA}k+wJQ18Xw^RAi32!r9d#;8ci{m@Q9Q+Av}Px3D6njU6uMZk+41 z>{!j6hCW|X8ss+UycetrZ#Yv^lCl}ZTN~2^#0{(o=%9>`4RKnJye%wt*OM)-LY>~P zI8}B^wI|~x{{Ti%=4FC7xUX~FoWk;AVIwgG*_1K%;}}IFT|#iyB^rpfu8bdY=CvsR z^2VwfEi&`A{gyReKXz&@8TT3}VQ`Shn~&Oc=)=dL*FDRygkv}ps2cP6*F!jC%WAp# zdCValS~QQ(~As}m8XkltJ|S7cAIh1 zdy-k5M0|W@Lq0v+N$(7GY%W!LVCKPENJB9#7V*^PB;jmE!GlGdw>pYv*CE z7)Fx&aTv^D)a6ul%vjEJpl1lkX%8spkbc$6rO0D~Zx?oZw5FGqSm{T}%R5G_Hpc_f8Il4V5PNtbG?%m?7Q>ENB=~!y?D?iQgVkKX=Hy8)5 zuFOFzCsL{~3v|)MpM4n0LCk3<&t!{oEVbba7Rawk;Vk=*$4Z**u#v2{5}amfWS2Wo zBcpovWbV&Fu2F7+&=?{|F?tu$3FAu-u$@wB?dl28vE zj~#LgQMG*PCrKVdhfd|R#H1T$YdeIJziZll3!AYe`aEM)Im8nw+c?#_*_Vhf}i6!G?jd zd!D?q%M5T)258fE>`!M30-WvKm>xZP=Ug!om9hph>>ic8;BgMRiMacGg&r@NlCa~s zz83Uyek}{BSE3>*B=gDY`?91V$5M9m*K{Q{5io!RxWSe_Ph*Xid5K#+b7|7Q}vlkM;VYePctXi1jySaFU;oFJfgpyw6xX5cB zW@{1VIqnqsi9T9Y^yCs__RiM&4z}X>SPPo15GovR$FnR^!(Ei%OsEUDHWeOM!DM$e zxgdKoKv8VemPBY_jp7i(3D~ZrnD-F*2c}P74-D@{5t{*rVfdF#@#!$$1Luwog@%7xm4rzM20m`A)Z zqY92$?p-Gr%2JN4DQl_auKVUHBIIHtKOoLyic=WE;3;Bp=_3T|&W!ZTv_s>|)V7>X zmnDarooUZfNTgmmX^|V6pFHFO(tE-R=-4wl=W8>z6}*Q}4w}x$kdQZJLQi+je9IkC ztfP>jZp6+O#Pv9?Ta2b;ZW=~2adw8&JaciZ43Rh^qpv{Wd{+!Q4O7cW5OO8n7!Hx@ zOvo9=M-fB+09Pt1k<#I1d3kO_mv^VN*7h-EIXDtlfaH6UDNe3-s8i;30>nTXrO!(4 zZroW^jEw-VS4r46VyJPP-7XS7;zF?UEu1c`)X$pDgf5T{4>-AD2?q<6x%n(pc?$%hsnU=59zg!XkAdNLjJ!D8vF! z+Ud8$QZ0L_G)-9Q+11Lcay19vO}y#7xeU^BGxr}W$tCI?zZj`Yje7xQm5Bq~e?6^$ zse#w*sT%3C0V_u2``S(qT3|Ma_N*odmY9Zo+m%)B@8f9q9gB3T!6Nc>8l;gy6VF0I z&jU26n3)IzZtO1R9d#mi0QZ)|954?-T_E$j8s_VA29c=HzWnLS1;}y`L&e{Yrx(j| z?vO;wV$9ZBXygM9$cZjVL!OPCum@3djggB`k}6rT*x5SH7Ky|TUUhf1>RhMDOUc=i zBSzH5)tgNNA8N#y#4)-OShf^}Y-6d&8k=_`ay{V8es?ulkt=OMj?X&V=A`8xl;k-H z`1@|WM;ux;jFw@s{kb39>K6zJC(rDIk)$|zUDc`Smh2qvrBaNd01hfw5BXor-Lc4X z98HCgM?CUe3QHzU4$o8w)hDHUnf~e7rTRc#C4OH76`jscUM}MdSnJ z%O!J??*3}8ZCd1c8x}6W-kPi5`vor@KhQuV~<2Y<}I*8wq21UE4 zNZLX2e5GRnq-hwDUEI9Oh5YnnmxJRhh#{sdTHdu_4BbxM%+os;kmsgb;o+~;Kee|6 z{`x=>Yj9@S?-#^;cT08wchxVlyz9IF0M_w;h|vE4G>2Zl!hgZb{Y#&0ub=pn_@Vxs zKFY<{(=P!U5RC{&n9zZW?K^xE!13Q#Era9_w_mPx=KM4N03*BgZGVY+-Y5RkW9!ec zdzWOxC5~cv1;>YyijZo4>wi4N0kK;L46K<({a>i-@E$Oqe{?u~a~K?T92*0@e$Qf- zZON$7ey&cZ@6IESlbEq2#ESOo{w2xCy?wVR%@XBEATzMT1L3Y=5^m})`gLKMsp#~k zCedM$WsSt#r!8?-e{QB>wN!g?>{W_jWoUuU7i*&w&zl`sy*c+>KK-7g<^*fa%hIoY zU#$)&g1O4ks*tZT4NgY1jzycWO7RAF46HpW!>Q;q)26zuU%75FGmvkZ&y^@L9O?U^ zGTkq*)kg<7dso}5#Ml1-K+Q3h{4A?2XQeh3C6WdVxJMXrq&I=qLgfDdM7x68>Ll4V z-c(yjiwWbpgdTNoz98d;Vk*G@04vFLu}&o|DUMTxhAqCJ>~f>8hh1_+19MfejYi1) zn>mz_@vb2+9}h20YYAnFoH11bx~r~J+l)u@rBM1v!m_EsIVY*sw_|cGDN;ln!?5)4 zt_m#?C#4^eOY`Ywek#IOj=w3!O8j*17%cw)hfY~p(buYk$oEL|U!>}++>Bz*M^8}= zm=Dp?mD_rW%pTpIg%4`ivroFsEA}2ajg7A~gkZZB5S1W)xn&CY7#Poq*F%UC>3H{;RJM@rm--?d>RE<(gIL`q#*fA@@3gN-Slayx*HRdb9( zwGy0l<5tTqUPPP#zft(^7r3Do?s5+;$)J$5)}n$Ki)|7s0**m{OJ|_YGpfC9fd!5P z?%&I)Rk9@)!?Wa9U$oPU=W0BQPJZ|3vtTt9O~%qnr5i^9!vlhljn%5Hg}Nn{&Y0Kt4N1_m1{ z-g@egc`?C`8*=7c*N6g(LxAC{OG=UC=boKaVJ96aVLh>7=bA~?RP<=W72mk+U$lcc z)bTt_NNF>(9J#r@DM9E0lD!TlUgza(HA(oo6fJzssO>+f%!9Y7PB(5R)#}fdobPCm znIs;Z2*vmL6h_GdmrC@m51Omo99QChCMt8;6nl|lJ7RQY%TH8}hj0P5{aMbl<1O2q zedI~{LvO5R74X+24wHsnwU-TUPnGX(J`Z^+%~~M+zNxjLvUv0=K`c&K=L~#~LDREt zQ;;EqnT08Z2b0pe%%TAYob9Pv^{ZOt`3k>>4|?Uu#~Tqy62TD&ec&gGLKMOd6~Bo7t(Y#s9SOj*47X`mHtJc*s>-k(%`89^ z{%n#*$5X`!2@iI3<4j}B{+CY73s$0-(E1egDAeX7YK1Ft^(e;*OC0gEmwsJIGFXw7 z(IQo1eF`1&-a6<4&FHj1)C)Oxh|WXk?oM$qtxh;#`3Uq9G^XNuqRkzdufvH7d1HNWd1fN7mgf*%kq3x zt5c+sAp?=*9n>UHQ;`@Lij~X1U8~|Vt*qOKl(oh5iau4$XV|LrWg;UJmq6Zq8LNVi zaa!Ozm8ywXDz)j=xckzj%F?*O2X^mzHv!6nxD2xN*7MRWh{$&%Cpi$~44kZi0$}ER zzJ$(SljOLr7TbzdTtYro>)5RwxYGPVW{DZd5;oqO3Fr?@WNVtimAPn>SFMgOR_9s> zi4a5W#gz``vvQr(sbcgJH+Iyg8uNa@ueQaJx~hPHC}^aQsR4S0^Eua0jH5WtH~{S& z3`R6OsOy$jfuV53ikIZ-E*H8vE@$%Q>_!n4$`)pkYlqzM7Az!&T!DlWDJl+pNY;Ez zL`a0H#~raef<{br4W3czS=4zC#CtxWjsrrWGDpfnk(c>~|@+DcAiZK))Z<)Rzo^zAANsUKrl#vseQJELK7 zL$`j_tfJr%M^W>fq?6p_Eb}I5rHzsbw4o@=Tq^sV0e%Dxi&wHGQk>zijUh3U~NI3XkCKN+~G+TbrW>J6-+Xo|A*qs3(pB6P6Iu-E| zc!tZDEsHO-`(BK^Q}ZGTtfi?X<8R3G$sfweQCb@BU&Ty}2qXcO$s-uoM-yRYbkLGx;G6%E9@$xeW?B0YbJ4!R0VX~wjA5qo<;Eki0 ze)lo#-N$DG8K~PGSq6Y!$(8v~#XW0T_34 z~sq&J)4b0P;i^o0j@0*D@64+Q20>T6Y2^}&U)9PG!bF?9!OMyHl$%U;qW#vCx)1d~gqju(tC$nYO;wy`e@==B{$k z8IdFa(wSnjdKCNUq@4o@k@^%yQb)LY;Plr(w<~oR?e*umR9am*a_m&#;cW68ha8d^ zr-DgPSF8^6?8dCd6;~Z{!>WPTjQ|u0UI-x$5!ow;jVt7azmZZJf6_<1@;iWJO(i z4diUygHt5{|1bV*Y_+wywocn-+dA2{?UQZW)>fO%lWp5P8Jn?Tf6w>1ckaw@?)@h| zn0d|nomY-o;`um_A2lgJZvRKNU>Ymj#sT)eRGSz0t}x)SS6}Nytcf+%-Jxus70L0kaT}>z6hOd> zK+fBvsHow5R8t1B5a$taJ4#;o@{O+3=KLQNOtE5gyaJF~oBNikidYZol4q;=RjQVY z)U?J`t!={tE$t*>WkmY+SsC7ZXYmn;fwK3SXNXF((ULF)aHxf|u;Iy)=mR*Fj9P5R zt<-xiUo9Va#Vqur+vZA6uj>318-&pZCcYU3ffe52XTCg8YTsh#T0la|qhYowOBFJV zNLsHP^l2l^N0=mSbJE)$qd8XE;DNVPQ!QB9lV-tA&>P@>ZhczNEi6J5XADJNnwRK?Ik(-s>*(#19#nfcZasALh8*7;=j-`@VMZD|+6L{8WoOn(8F z)Kk1G?)D0ndTYel-O%r46~<2Q-$*b)v#cOTrf)J$%XPy=YnvyAp6`(SLIeSpu)Et4 zaBU87*Ox@nfgYZqaihgLFSnHe_W=BP(aT{#+oB+tP~SwVG!k_UM`e}-jUQ)snxLY++ z8<8FZ3W#h6E$YKOKpBDjfQ4fYcc$IONK;cY`eKVMrlj0!39(HMjf>HH>CGJ1lV9!8 zBeQ{Ph4s&9M&2kNrN+k`vqNiGE)ESGP7nS4{9RR6`nYgQ?%s=@Z|siGLkM(NCZw$R z6fuceq1IF>at>_Mc{k!M#iq&cv|^XufHG za*MT{i7QMUmg%L4vNGek{b=1h%0QatUyw}n?@nITZWgUZM5~D)%8MPj5$N!*`>#=U zs#1YTGSU{jmDo$}2$H*E)FGC2r^~lVLOkcY4`U9;xH0|KPN4OA3{9pdNZT)FR6MBZJMsV`d$-KHcJqw2-#jlx2SV1U`KQzid2J+&bam zOfqbwT?33kx|sBKM_eO{Wkiblt~VKR`KOT{mPU#{F7y`v92@=sc&+N|cGd0XbHDO_ z4Vz53q{__Ks@AfKp}mHeWyJ8V%TPqOb%~9eGJ%*F;>^95*Yfl4{pUU^tnA9GhV^qfg?D{>J`9M&FCt)$F?4`a1OezgDXU-Zb&Q2@Umi`Lu4ni@( z!&-%5@w*Pilq zqSS2t^MIEu)yk^Twz*LkE>R5nfki$G{ zY%^#qD8reXPdSK>|F4&A#?HuAW(3Rc1Cdd06F^*G6|o-enzwj0c zb8ON>Ux_e>SmI^Fw9A$AXs1rpoozDoQP}Nq~a1RapanwGH(lFuK_(wNiu>MDbBNwe%W za51#`?R3dRWy*^@tM`8*C0=405{+x!CK~B4o*ce)+Hm|%T5G=SAMyA`@-=`z&8$NY z6{`ihlL? zYe~umMuBUr;>Mjug8vpK)|{mbqU@w)s?hf-Tw&xIQm!}%Pdl9if*HhfIT}@E3e5>+ z`4GT2{a73X4zR9)WwNFrP^X@lFSpSz-o)f>x-0PjE>$Hx%noahc#FL|> zR}^%17JhzTD$Z%nk#k*ZL{p|Rs6+160BBQjv|3V#*&c_qU8^y~K>w3`tNlBgc8Ry9 zI^5PU3U1}FzrR>=y#cE4@Hp(F8iRw?IKC3IGE8iI`zqkigesdmy_h#oxNV0s46jaZ z*22@J6NtU?X3MnL!0L~@R?pgk)b|0Y6C&ZwT!%O9(fp=o9Pl@&bpPMG&Bi^^^7G%8 z!$>r8onrWZ#T8R=>u%|~g^*XisTtwYukgY!cl!0YgjDy3*U*bCbSmalxQ;5t7vKHm zuWr$3@t2K`K2p-LfeiXYQ3;wGNx&$BBjGiK^F@Yo4j@HfIFUySk7H#V^tR%hkp=UQ~)>(bQ+{{zg{(?<_{0JoU0X3w6uGc7L5el&H&P>ZoOi^foJ& zQfUU-1PGj87EIm69L{3V#j6$A7Aa8EDY4E^bchDx;0+_2f^)_i6!y51pH6b2V z#2gNindQ$F+Uoh{1}f5&sx0Z<0WH{~x=2$*PP1ZhUI$wWsR+)=KsZrz@!6=&yPCNdn_? z?>Cp5e^8NcT&7;W{5S3$`!|3|NOZD@{pcca2XsR@0+bb-gHd0?jIf zho4@8Y{_MVt5@Tt(F!U})&HRAzQ;=$B$`=uw>dct+T_xG@4vlSsZWoHvX}f;<3ZeJ zk75Ql(-3@QCqH`YH@KyT&cabJN9yX4UcRYWWz(s3i7FenA_PzT;jMcuS6}C+mVmSaUD4 zAuQ2$Tdu(|Sw*L6)!E9H;8&hN4%8Rbt=%ac>qh#^F>0bylZlfPR>gvC$0s1u%QU8? zEoh~lTtnp4p$HYp>=XjO#CcU@wsDSs{r9n^0V#zAFSgMebfS}ZC<{i+NOJaYP~g#a zq+n>b9x!S_3#ks@)y`%J`Q8Ur@u6>s&h`a*DC4})W87(Crz)btuGGtN7{#nm=b+i6 zG|l3RsBc7fREWeD*ZckWF5#u^QOYR*hXFlz?Ps&@51P%*t15wsygAk<>=tVy1gv{J`p^>O%kuB(a07!wl1+? z01UZpK7DmXt$iI~X~Fuz_MtLL{G6AAXK=qGcUb1I*yMDVHtJ4~OO=t{(($#z2s8Ic z*}Wgvo!i<(b9*j<8BujnF9Ys~g_y{tO(=(>JA1>WHD{%C$6@PgM7apAr2-ieT(ca7 zH}uOB@U-Iv%}6MLuOzs#mG>Q_)FOahVk-aM2{RGcFl>EO=j9o-FrEB<d2eg_1hToW+fed4Oh(PwwGY-P^dt06y*6^pAk8|nzo2h-yFEC1N49F2u8iaJ1POMzNFt{aH)5Pa zO(XIraXqo1(4i7pTxw`OwnI2FAdCrUzt()6M59*Md3d={5vBWc9$k+`ggv{s!s?wL zqOWseg(Q)=w+SLz6^XRGLM^?%w#cx$Aq#=J+e%v*KHHEiz=o$Fz+F%HMZw&Ds>={- zs?PTe_`0L-Dz>s;Synzs^ROcm5vGo zOa0xz^sR(-SUQhjv(vaSorh+Nhf4KQGxd?h<8NhUf|Lr777txHuicW9nO|^-40m=~ zjdyw(B>eT7>B#NZoD&lC_m$d7KP)V?P4zwwicGRbVDi)qu)J-?YrsgALheR!66OOs;97v$Nb^o_9%iO1(?R)r?U@{ljmW~ z*p%Y&1ji;$L|&_z&p*p1w@;{|d5)15MaE?I+%UfK-|W>cUF>-$5FhF_+AA|NYDv#n zR`3v5V+uDKru5qAM!|t3&}Rf*6o-!=Ci&x<$LZx@5%8lTM45H##A@3G+I>bU$j=B| zP4!l(atd0Y_E4@Wm=5^EdNj->a-xGNai7uJwF95NYmz1o;aoGHYm!=O>*XR;00Rq{ za+bQk>>=Il_@OezL1?A6hUOQz$ngY)L3CFc@*(t}n@M0UNHVipo7@FD1v!lNsKeKB zN>(Y_*sapH70a?qTIFIEpY%B#_PZa@mgAHzA0#Y`ItIDI&}&b56%yl@O8M)_5SHj$ z9}3T+^!=dKTLjPbY-tS`53nJOF!_s3ji?7-e`FLnMqGZVzD^;Xx@t=0^8 zJ9qjvG#5dTtqU0W*~*zfox~e$-=*ebyTK}I_(-3nMoaC^L}57fnncG01o9p9w?$1Y zXrp1DGsu3%KX!XPiEf+Gh({Kf!ft3!1or*SQf@unGj=$|_PT0+`qYVx(9_s+0#IjMQs{L;ew13AI^p_*P+ zyA)%9ZtRiKH1HZeB`dh9%Z+Z(Mm)FBbBYg!B{YjFDV&S6+V}6nDie+kL$%}=RG8}r z=cQ)%B!p)50KT*UsKa#HI9wa|PZc^eU9@wtF4IRT`9U<^y^BY(E5RZRHl@1GxPX69 zoPd@>b0 zg17A%v2LD0TZ>8w$5fs_JTKpDPpz>4D#rs$mz@e>iSr(7yl ze-*hguFW%m0DT^fXF3JxA6Z;PG6`O~j*f}l#uuRYDT3oFr!M*Lvj(A+mH(i|(ev~t z59QGjPp`}UebsdLyVor$NcFUpAz(HxUK@Ft`9sP`wfHL~1Hv)TdI~pHE>lHU#C$EC zyZom2FX6>DjtyOYnN!b>^y%muTKts(Y1lh<#T^uvRQE_Wd)m83dxkxPrY5JzGq?gn zdX$(%jFX89?duLVMi7l-O3~nEvef?mTR>#qYt~*cV6Dz^4LvG{D(I{Y|7NwuBP10~ zdmqpHiX@`VNGm2VjyX$~|EYhd%5>5GId!dT^Hb_zGJetB4BS?t$!LXKD%=x1~*l_z~BU5dK z6FuFXNNn`y*i2o0QiScWYQO$v!iA}_OoSvowOYcl(>LPkN48UPn^Wq9U}^EeELFMK zyNyBPI=$h}Sf;%9)WN&5@)z*5tDJa_$QGE(nQqmNx}yXls<H7VsD$Rz1q1^5fk3bu zG#gf1WAq_)<-%2^I^>|HJCf{(M|#qkm`d#KiXt<0xNUidIR~CT z>qKi%8u^M!nepv%Cp_+&c1h1o^NDUXk(HM4Lp*=RCFto3r`EgMx;Ja%pC8m%vl+RN zZ|u~6s3u$7S?@DSu4tV%P10!;iCqgE#3vfw658;g6Mu3G)|T;3K;kATB06d9YPUbr zR&974RAE}Vt?DMX*d|&Qq^Yg{^fF^nR3T+pt6VKQ;Uh9E2Pm{(Pe87*S$q+7dxROm z)?aG()>A?JZJ1iRI`@(@QaQiUs=v_IE>` zi0A}s6@1a(9s4hOfz zpL5_T>!TU)3>WzIrBvn5!x+O(blyjUY|0G(8BX^GQuqVrC*5O?Q(+ z;croF1omUi02J?e-Guhq8U?|HK^*ZTypPIL0#a^)28?%}eiuUQZlo2>V``Tj=7>bZM5W9BK-E+Ud0s55K#nND(y-Rb8sF^xODZ&e^tVvE26KTld)t%28_<``I`EU;Iy^C zu7PL`_7hxOikJ*u8Lq*{9Dd@Uacd+g1b0$(H*?5wEn~}|#YR#MZdR1mT>S1x` zoX5v*-V5-aE=zn1_(lcVDwuXU#Ehf89udr-_WmX;*Zdi9FQmc|MZG84j%+n`!m5Ar z#_@@WFDBVdO{cM0Z_**+w`Bekju&r|C{G9@)3C;6N_UuNYI8crff5Va;bqbP0{?8c z)zW^x#YDZ`NFVvbpO8g}ZcJgXC>v?%Yosfz$LIWPMI;%zH)jb`vs1zh#}Gzk9pig5 zjQbp;C77p2L#=zZ#dD*ofm6N&ACIIJnjauQo9@61zmmI>xBm^lU#(x5%Whb zd%2HcymJ3?5kMZ@sEVV5rLl3EK3b#dLqYn6n%oGIOPS@JrSSAaO zbkf?7_6@=&pAW6Ao8$)pKb8K-jb_~mz)=1`2}$TwQ4w_49$4UrVHAMgJ8HDCl$t!@XJ#&PdxKq6Es8>Osmd|664&X58 zk`A#chSaY&C!5%@3MG*#{2u-X<+07;ObrK`K5t2D9f&h9y_i-6#pXu91CC+r=|A6R zVoMfsm-ZEwtOJ?c}Sjpk(?Le?;_R5hp`P~V}V%{5hM-$1LU^lN;E zUurOr7o(R%e>9bYfQ7{8yfJbyTrf6eip$G?9%3yv{trq=lF17!SVBu z%(L1(RfxpVRyr!t$wb6Xq)bZzG|wVKeDCWEcGUcS_-3<<>oBCAenKXp!N|JWJl{{1 znTm5a6UrP#1iOmkd^h9pDGrwVKd7GH_CjRoykt@Y3A&lE!3GzKV*I&6BN~yjcweZOh*!-wt&oHa$ zlLah{vx64u*ywnDtQ*Z3&Xm65c zxE)ggd5P8=)P=kVHvrCm9CP<4Q6W=JO7f#kM#v?XI(P6t&c=hUQ7sVmiU~*Yb|0nB z)$L@~u>=qw+ekhtx$XN^)52&ibf3xD?LpY+^O^}3i!`qN0HZ)(g!+94Bp&Z2P3kGe zn4pkcXn()SylxExjcFDNhSy73m-r}c{n+0>)$pGlNQ(*_%Ob)fC(M+dJA3qqvP?lH zqN&7ST=xPZA#|Pg*Y#?8MS49F6iU2omxwHEQRfz^M?nnUy7cCDv@vXsc!uBsNMEs9 z*;DV=)FC>590pzgi`8hZ9fGAamP>pgy^#NmGLq+{6`J#%j$eAJqX-%}zqS}amJ)r^ z9jY$XKD4^f8<`ZAcY#apfE&az$otuPFgv@>x`^yE%k-j{!y&{9_b&hQP`q2TS$4E) zP37>|Lfz`)QGa;pOPK?655cm6rJS(99Ov@1*I(9tV~mIKzQcJis5=kQL(M=ewTw2( zyyZT5;HD~zbIi0sL0jR`*C?;&XRj4Tgp7BgDToqE!sT>|ld{y6h^0K~w{F|tmAICi zl$ev3_9U>CL~nLgnAMfC30|KjPk&_EcES>0L+nLC$bK0M4RlX3GBplP;V;v9@ zjXlY2>UA-Fr?Jr@+cc?C;vm`FlvvrQkjc$Mq*{w`c~KP+;j=x)QzWRz zf06&{Ec)BpL2N^ymqBZ%rNcKQE0ZUB*za&X!}R+N>yM9Z0qVN&RxUJ$38=*W!^d)O zq83YTbXYF_=<6$&RWA(I6HE~I`7_!vov3KY282df9j($-;78PrA@^2KL(;EH^iBVV z{QFguBSQu!o+SqRBovh4j)Y>1DLh>i`=RmC+XldvUIJ4$nh`1 z?V`$ekcnfj`s4gAhn7-ZEcm7nudVQ&VS#;pmj3W!`|C6@Wk@hvNXYATg;SwWZ$+47{p3vr*+l5+%l*uQh}y1ZGpx3#I%X77 zUxzv#>-SR;{yCUwBkHGC6^JA*(Rrch;?365f=4pYmst3}5&sf_>p)0+7 zehb6K$U*adL!I~g!1a#A+86GTvHro>yyT;NEuo4Dp1T40NV1gFT* zOvf`#XZ4;j-Lq1{S&q_|yUWALs|}|xX7{~jj!I`yRg`)S23Beul4+;WhbYZ7mVyPE z2*$=fl~yg0hqmG>fWr9WJJc9)d8m{Fqgp)C_hDyWUy&Fn<{?+Wq}$hL%fy79V3P{$ zp?^@-Vl3vf%18UPJ|Yl~&xmwx*QTDmPGl%<{8ywS^}J2}UVjIR$F~K!*g`6i$)225%|{TjST$KPXhwq+huxnuqPh zc`a2;t(0*%IQ1LQtn{XovkZ%R6z|vLzc2sBdm2Y)I{mdR_;L4p=gIWi%5nW*<1q?m z6cIyv<>#l4Q_J!ibgnV7dfzzTUt6m!7<=-^5_y6_mQw|d)9cMQ^&QD9f5kks#?lqA zzQrppY39U81#c>~6$)qqF+$Ilt||8#X4##Rdb^3ASsAHWYSQM&EBj_}Se$|Bn#g(NXHmHd$!fegv4VVAKzUQrSs`(yOXl-{Lprr09z#2iGGiGY_o~?ff{pzojHnl z_u(%%Bk|UElm$IsHnD6%7Iqk})n4Uro1C>eY}a8$GFquRluLLgng6kr1Kp&gDdQEm z(${g+0bMxm=HyKLnDfB27R?c?(;)3Wta`bWru~)qsUwUf4b}?ES9q0bJrIfDulrNY zi>;kaC&7`y`r+?Rh4N#*jv?b;RpeR)38ksZm%wVSFxBqJNz?sR66F?DHTaSl_uzFu zN(c#!VfwG#LZO%V$3uZKQQIvhuV>;XNN_LdfHuGaqfsAXW^Tt7k1%k;v(X1#+xdj{ z3)!-8pe)U60Mfuu6D5GwE!*m#oDftzVxZPU@3ac>qQi!&*XX6RW91<$?{CO`oB<0Q zhM*c{PIUfSm@RS_ExjMiWo<(wZ#`Fu{s%>gNiuqLP&!<}ykZf+MAeWGaM9<`mQ@Wu63 zKFnp_InQ`Rm&FN_QC({zx0Fpm_v@;U4Kls+`w)n{ev*P6hc$TGTn66+5VuopN>0m^ zpf3Wp+epvC3gc5!DVKWKXK)(jo^xEiFQ6Q&R^!c+XvCWtf&a)-Qlo~S!U z2Et*Z1|!T}rB4m4MNl-uk;bkPY;kb+uCyi4Al*IbU8_*0hVlWw zl`Yo50p&|K%F@-{CjX%BPl5`(L(y*||WL z;?)A|wpOjP$p%-w1d>gDKUq%O@4746Wv@CDU&Y9k0u{eoFp7-np@ppqyoxHDQda%E zJP|Z64D#M@b7aD(C6c{}PAeBKo)PI-7r>Ws~7-SW9V=8hS|bbe}r!fqx)60linozYd2 zsB&Ee-|?OXIrH^xJ??3XT6T$no21jSuD081(WYO`Md?|qvk3Uq=q$N!&-QCxz!Hz? ze~_*U7iAt8Wu0J%4$OGY&xMA#eY(tLWsS7=XxG_4fpUKD!zg%uoxDv(1uJWU_$$~@ zP^isft<%>m{u9(+M1-m(H5r#@F;u}Sm-AZ(wqiPNR#Yv-@(M=5IP69p^Ijed z1t!Jhez_;8bVjJ2GEGl}$qzWOzkJd%ilrWrwh?J}FDlH%g&g(fB)~Ojn4Zk}mG-YX zXQhfu6_bLvFhpFm+Ze=6yxbWK_7BM+bn-T|f2aXPcFMgD`b{Dx)%h*X#CCp(&>O6> zCx!S+)}gT23T3Aonn3u|%_h>k&Tl-18OI;z+kFFkZnyvgG>Y6cThykFB+lGwvvhjS zLsAlsw5kD2w9%R66bk{ATHOy^k2cT8y3MZHj-#FTGqhHhMWYK!v|KQ~f48H>Sy~oz zh4EZFcS1f9m5Lz6Ggniag<;ykj@mnK)EeSM+ivk#E$eJIN_ap#KSCZj&zYq#(LN1- zCG#LoU_oBJZt@dl_50vG=c`A029AtGO=FvM%~V;5QUe@qF2Yt1sm_=v)Hz2az9Y9} zfi0wiDquS@=)MiYnKu1wwj>ddmth~hY+j=i=f+nQ&XI!JO`PDexG55S*V-foR@fQv;Lk(${K{{cvrtY#FMX{k3ReTBY37pYopami8& zTI{r0EZy?3yT$V|^*L()YqWTH5GAwGxPT`lWCj0ee>3p2f8gciVYSHnDTdcbFWPaG z%l*|NP*286pQY( zm6X>l8jet$Gv&0_848saAe%yJm)g)v=D*hR!Yu|Tbu~H3??jUgqiMQo-vITMY(+&< zjs(vVHB_aT7iv0Z?sXy8Z^sW;P)|+8sVpm87x!xA;7mAq7?VojJIUr32ocs&u-??6)AB<#{EKOVj zs8DT(aG$l|8-PdJ|IDOO%YNDXpexjd$*kGo_*Dg(ng`L1DqEFSuh`8PKWTnX3|G?i zq6gxFH2dPr`=Kd7JI<$;erIENCd7vdTC{niX0qsj@aZRK)4!?4%hc@)SPjY+MulIz(1=+SDm&dwhmr;e?juaw0-+SD8?1Ifb&GR zu(7RXjNr*7=kIfcSJw(}{zgh_a;1b9^gE}tahD|%v&31{<=n<|uz7AeZEsxo$vR!b z(R*D|Im9T}0lV{v#GaohfHIGi1`8JFU(eOPoj*)oy$n5#bL$MT+gDnzQJr{Acc{@G zF8!hzwU?=r3SqOJ!xTG;Ay@8;zW>>b->5*IWH)^8>c$E@l&V+b=&5LHX$l_pn-3?d z9@|j}XqO{tr$$o^Sc&izI^EvDgVK!3hHN~lToGXkTJFKyL< zw}E@Lg5H(ruQSDkU_frM0>ajThk2K5rsa-32UEHtfkV2V98)yCrpV>>JHcxwn!f`pOcx?>Dm zEwZ(}PA{}=k@=Vo?s6%^nqeaWa1bNLx?Z1Z*EYYzavq&M z(ywvnq`lVlz5H=uoR`*6(4~vn+5KkAQq(&qN@xF z>Ne=If^c7Cm7KTySa1pK#%+#3w<#vtnzpP`m{Nxu!XooG3LGWJM#72i_l}TndAcb} zub?xHy4x<$Q`36z#6lU`BB~=%Z!e(XHzk^fgGHLQzHf&oy8fH6$l>>ke^AFH__du> zzeR8wwn*vBZP z=mpca--9QP776ew1adN{9K(-kH%~lm-+k?#F0*Vxld?$cX{@plm0N<~u;MfCS5_&E z?8nE9IL*M~zfH7wPq$Bp2WP)F34m+*a8wI6z%~s`MoKJ8Y?wq->i7-E_d1RCS>-Z7?z>7PJ;=Yy=5E`wkR;6gA3n`0B~H zBh(&RY(h;U+#-pKsoSIiam zAu(Qo%?;}0z007Zodz70%`l3cF6mI{CH5F@Vh3jVW8X!M{Qz51JgX(_V+G{ozPcr| z52vkaq3W5M!B0M?X{!bA{_YIe(I`vo+|G9(8ai@Wg1$Z@I0G)?3l~m5J02`@J&hIP zV&ZLil^Bs22Ju&4kxrydJ#lZ`OWieAS%@yM#~uq4Y@&vd7ZmGrz68;nlM^8I$Q@*I zSoJpzJL|#9v+;vd^*Sd#Qo{M1_yN4zJ{*2d;sjjZ;?`TkzfaJ%<+n?*{O}?c-f0Um zmcZSC@5OmHkfLM<6JeT0O9R*8+!C97CO-zT+T%tayINN1G#SOM(NO1~K$}yINr<@^ z%f%abm?V?$!)ftD?}F#6o-f;FIQ`a`EkrOZ09`8e@egxqePXW5KQXD~okOet)5AE0 zAMM!R?WzdjK1bG|VNkREdMa)4OC0bd7J1^7*7oze`txV3>+OmeduLw~wr|8(HO3`5gXiR=d(Xyue+l+ zFv}sWDsOaw*Z-g%y9^K5g{Hr+*4z}_fc`YlIJv1i4An3~({BxShKUFApi7E}xN)i&-aevRAVX1g&e9z_a24ht^V;3_b=_t_q6B}xvq*77vvYInPGoo` ze3Z$8Gbam7th-QBN3I@@e@JZ$oz(6&!)vW@)F=E9mA{piHil@#o#Vt%7B^$e>?spwmpmHAg`Dg|fWfINavy$Wp`j zR)L=h8-(__!HT;c?bIPT^Zm|9_%0~0!)Fubg+9IPI58NGI+GE&_l`&5!>XM;0fTW`-0j8%9eNoD zHd=8t5(YfuV*F!MmC9{R;x+j_I_G-_(9bC(Q$&KsU57_{U3#(cnXdT;>TNQQ`KWR4 zcs1baXY?Ud$6Ua)eU0MJ=Vdj7LF_&*Lm5+iLPkA`eHPp_!E&3RvkE%nFXSA)^BKlR z*`p9Jy@%U`VU$CDE*%x&CZ1F_b+$NdE%Lda@S%V%sgCCNU%ZWQL8tfCMXYAqwmA?V zy~TY;2JWH?r%|C!{dHcjIUc+p#2!6(U-Po{s)tWfxPxg6F5Gy2`|H_c5v84YJLsgv zo6O#YMunOc0FolPRH`yh{+VtU`7y2`%3K(Gbz>S*ONu6iB@g6?EEfD&Z@dB{e*GwQ9!|sqMw;uy=KT#95upsb=YN@`KB* zCcV2tWXjo}q zR{RL+@8k0zG=={A`1c&!$_Lt;mCl|7L?A?F8Ng0&XvfT@F2H=XQM^VE+7#_kIFLFk zF?BH0F+rJZA5TkGNR(A;Kuso!y5^LukPb#<85#*m*ryOMi=@UgEL>XM3-dDtI^65l_S%F>rOD#rt2v>Ba}fpU_u39NC^ z(~PI$g&|7~C@wc=wOE5PMUb3~AdgyM3-Q)xzR|uUvku)*nDNPo7;50gSop;ckIwJ0*b8_Q+@9=IF z+=4p&|Hsu^cE!O(O`A>d;3Uwv6Wm>cdk7HR-D#k40t9!L#v!=7Htz23+PDOFlDVIm zd1vOGU$DO);-+x!q*+J}uUNsgYYW#6bZhk@g$j6~<+pMeMMb{)f-hcsY% zn3pG2^#jzK$Lyed)mGSE!`!3%%#ayX=Gh=JKbkvXrx{P%ZI-|9_%WHt=KGuge7opE zjiMM%1kc&|4Os{l;S@rSHuN9hF2>73r@{k)A6MPd?bQ#lV0%vPO>5lnR|n9BxfkSH zkw1Y!Oq%KY^W&Z9&pIzmx&}r?$Amy-@9P#3g=>1fPc-Qk$#}<8Z~)i)n((Q%r&z4b zwdjKq{cf2i^2*n1;?i0Yx$IGtpkfyNTr1{}H{~jWTb)TGOpW@uPA<}<=B`%p1S2-L zjU0?qc>6=V(LqP~Z)V0)J!gV$*ss=lQ}1ZC`usR?6yaXQC6nUr9Z}%oE#MWeWnHy=YLER3Nyuxu-nzgVw z_q&_3Dhe79VJ&4C`{vABuMK!-?l8M#qW%X|NUm&8E4oECET$kQj#ht=`DT^hic=Ws z!*Lv4@!&Tz)zZp5LUhNcmjxB<4_g*}l=elno7wwHRM}keQ{Vh@=9&{?^Ce(}7UIUt zCv%VnH!J=kXa@mipIRf@%=Ek4d5PUcyW`FNWf;7gq(ijack!_g{OT7aqpcNJ-adrM z%MS2Ogpw;aws=amS7@|MShW(h9nl!3z{^>UFU8t5d9IX#1Mf#`dTLRQ`>HJtiP%#W8K4n6$ILEEAK;pwvRCtx1Kh)|75rkXb84k7i?5Q-+Ci~gUg?DdkzgXCZ zM>d4dkuY6N=g`AZNMp#px8kLveu5Eb_ej5oFG?I2mHLp?X$=ebon*qOF+e4uNRRxH z;LXWx)^?>$N%9zTyV9!@E%MOcP&!WJvp%1_6Wd1Pn!sU=a#0~k)=az4#Nfjio`rzG zW*kn)Y3qVso7>|l04be^p;Q02luhg#Q1Lmz+kNkxjMgN4xh8!#8o_!_b88(yKnyIf zT5K1zR81##vCmC$@z9qLtmdVBSc{m5SItEi%=8OHlwHl7#y*&-(NZCq_&e@ou1mr=t&8-7tC zkte%X$T(ekq{suGhp;|V%M_(rB&zNb$&abd!C5~@LpYU?Q>V(e0yQrKcWa0JgZm|; zB)w>g=x?48Ga;=;Y;6~ojyd&32o770p|f6v8fWqA3c3R@`s z;kjrEm6AR)tRSz-lQnW(DI={S5KADFX0?s&4QUV$?$vEiL}1gjWsS zW|1%I0B>{jk_|xfeo(flLz2@fHM$6`WF)~6#!Bi2Q7)ap52h!NJy{0r!-f zWO^ufNme(+^b(GUVFLsewJN-$w0;&C{sdAZPxNl6E&1o{{Is6eDB({m^V%`4(8gJG zFR;)z_wggTXg~ww_|We-PFFc^CkNkuWGOu0$29%gr!=7?7ZzPlt4PiSrjB4ppZ&C@ z^u(cYc746Hp%N`0E#AX*e#csk4+~h(JMq?|6{8;Bj=>re=(w_^H#bOG>KikSmv42G z)g<$z%Uco_>Ez89pBA<7xI{;q@bFgmEgA=_TLt{iF2YC`AY8VUo98{UbuH+HyD9v% z3~*ga;=tvcc9*o#*$hGwAxmrntshh=YR4t&ev{Z62E}-A$)dZ|G(THivm|tO#6h4a zUV&Jy9zhTFV_m`aKazw1r} z9Jspa&kYjUhZcuxVZALKI&seW#0G3}FMwhA_}yL4+3s(p>DGS$R>Q#NU~W>G&gn>DVJ$#OdTv;w9XI2qKKw**u62(hy;vF~+(#%&u(za`WCo32r>sPcCGYB>k;i zPA{&B#7IQ;>N!8h{D?7YM2hS3p|cE2!{V47aO~qeudNg=c7k`hnxLC53L?t!&}mkq zXQ&Yv)UO$s-PJg2{1Hgk(3oq?9OmRfD@XAnMvBzf!r{anu&@*T(l-LY%rZ*QJ;Q7B zIl>xcUHhiv=N)6S*@A5TSZEoZC^3RLhh@ZZy`a}+zhNKnjL%p2g_xw%04=S+EU_Db zQ>}WW>u%I8Iv9w?6S_$(<3qsKlPC+(((>M*ftf9iE~`*()O^>iRlf++wo__p4M&Mu zbNiUzmqa&_N?=fk(e>Md)Q;FxbA;nh0OTKFX=T+>zt2%Hp;)%z-sdb~hvDY(zIBVU zkLw#v{+G1iP?X=wg(SuoTZ(?o-e)yo$uT8J^|zSXtRVIX1B6I)E!q(LglZ9hxIR9l>7C$?(xph0@agPtDg19hJk+k!T4W7<@UkyT9ccUs}FfS6Fv2oEJBEW;(HxQkecc17ln68v(;QG?%VpVc8%hGegv z*?&(h9A2eeh)E{}kfW1@Y4zyaND&40>`lfvaUW~>1xkJw|4_}T{ zR^Alca7*DN8aE|(9YDjUsDM8`i}vBE!7G%L`$!P9pa=0~SWB1_ALdzD-X{+(V8gI< z9$BJKEtNz4LQMRC=>Gk1vjB8K7X`ZqDwydiu#+rlp>bMI z{MI++3r~X+?N|XK2Er>onVsl-(w=I;I4uLGq|3vePCaCUy72542xdE`x0zWWEN`Fx zT1BTkd}Go|Q@#qbo~@mlkuj$P@N_?vY}&>m zDi0ycjvU^Ou=qAYxccTpB!LwMaj9tc5kIuk6nZwVP0NH1IylcPW=3a8PbATy-6UJV zN@O-^GHGPZW3;?XXPGDjJ(&9rD~eN)f43d)Hc5rY!-5X)DmYw#bdbrjTJEgWFGTb? zGH9Krh%w^GPSImJp+3K~PL^C!JCJpdH9d3mZnfycN2H8}|Ar`Dm+|{CCD(i)iletE zG0^B7*?+{#eix5GM!@FUy;@k~j4d5MQV8=HOIaB*$ICWq^=buOb6(H=2sa3yfr*;= zbodrUciivS5x@iZ-8N^c{{adNd}soG(yn+^b%r_S+47WS{*XLXJOy zdopUd&J{yUDmuTz>Xv9jlV1ZO_y>1#Zp~LzW2Is^g zIqvND>-z0puhuWQYwSqq|0VI9zWqNWp6UMq@tpLZSN{LIPWX2`w?hRSkI(ETpRE4M zdYtOr*60oV1FYHq4~54%Z}h71SY@9fO(4f~BEc}iUhy->0zFhaKm}glU2I!*ba^++ zm74gG22rV~!{-ExEx~WrcuaFYehyg#Il=Yr=+LZ)w)fGeQ1zQ;!z7`MO!_TTeLSZb zx)a=x+tF&ezt_jb`r#v%ODXLBkKU;~kP!Ak?Uq zPYkbnyQ{axWRbiE$ZLL8$Z1_>uC|F*Ru%O)fU1NiP#hMXcPU3coI2^JM7b7JOM`@3 zSuYX{Xry^o3zf`pTBF|-vd#AJCyM@v6-G7Mt{bJH*Bd~@ZPlZjt8z9j41a`PVhuoD zm8n`j*B9A3|K@=uTbR}sy1G&%1&VJzgqGvrk0+JK(#G<;yrd9kG)#8+=ciZ4k_6aqYw%Q0PVIN-k3GS&K2Fx_0fLz*m0 zSl&&G2)C*t6N~pAYA1zLGt|^QAx?z?zVSUPsPgDl0NaV$f@A@_)!0e`ps#)1s@huJ zuTmUQPVzvezcwfuBR%BHal6wLUkGSKkQU7))n|#CpQSSa{sWW2pbSuDto}1HW8nms*q8hEI+gCz{}r89}fvQn`~yU2~;<>An?4LeGH^Ru$Bjf!p`DXfi%xdZytn0 z@^&9LWOjzUvG!H00WE84}aS(IlwwsR6$o)>(oi`vmMz!_#k!Ao%UsS zD$ccz`TVkUz83G9w?2LRR#G+MVKy=c)})T*M3Yia_)MI|Oo^qMb@~+hMWq=5Q|bc) z)x=xRJ*2#vJha(dz6^uqYd+@p#%2L@$aim}D))|N>VUO%ZvF3$*Ej9>fzqA>^8j{n zCw89>@!RFkj>2~>Zt2Y`ULFptE!_foA&ky+pv#b{Yd7eyUeZ{gY{q7}hDq%nYQ-cM z=S2PFKR}c9qGEYX5Bk0)i^uCM3yvB+>S)K=beb`MKVYE-yb<>K?K@cq#y>z-_aF-Y zUq%5l9SiFsNw^_oNhlo4HUCtdV0CLe1xdSyE6e*Ta+7M&;P&n_BUr=pR+#DOAHcCc z!rc5-O^!FdP89Pxl(`FeT6bEB!L9H~3of1(lE2Cmr#rvTay{n)Ja=BgNczP|@1~L{ zkIT;-?5ab+f!^h(EeLBT=n(UWILy0ajSx2Wg1WMP4cZe*7g{5HvhzEU+sk+l*C?t! zLe%;4<3!!fg4l>uoJ{bZML|~)nS*;}7}GZjqDC-|ICm{vg8Z`;)_vow6G%8gqQQr_ z&ry8DiWh2*P$7V@vnzhg-5L=^Bl96)Sn!rr(K)5hQkiMymAvK5@MvpTh*58sANnJy zjK#XMEF1f049Q4DW2jjJz->slp;`~W_aUA=uR{)wvVXklo>+)=48Moih92g=28(M!n6Ck@AB z%9(PTFBB6HEh=KM`4oX|2))7H!L%i6sEXKc*G_353Ghy)D0orC>~xzS)Xi=vUI$h% z4^X>I#@ly(BzpUf=bjzBb2&P?S!_@~-;S=q)NVGb-&ho_)U)e@94f1S>bqeoh3a5M zF8Zk5XNjqd_Nkeo#qj(smqE=>bl~H>Fc(r3R%79qDMh@>?~lT$0t?Q(0~VLf-Zlo8 zZFF3D!$s!PqssGqbRcloMXvi(nDgK2&os{E0m*CL*fPTRhL^b3(N36~v{$Uq3k<{| zyM{|l%ZpeTEZRNkM?|-E`faElTz6AbgbCGr}}6)J_f=9UvfiwhA*X8PzJ-SSL1~m2EVKs6fIB2r76T3wBcy7L9-jd1XaJt?I zdAaTV?98pjq*TOIKLLouli=!1#w-E(Wivr0TTdw3V}ov7OQ?GL!FQ~Bi8jnRqWf=6 zwj1^_VuOH988Pk>mfoudhW(j|0-~-MAb8ZYKWO1=&U);RLW+=51LTXL_?RKU2aA(x{lb{Ky+ zY697h=;&s8taOxTTCEu1{g3?oirCu@>c8&@4D9n`Ud9sYv_9z$II6nW#){3#?P7|K zMx+JZ?GM<^?*6vmDD^ouo6U${*w8WdPi+FzStEUd4dkpZ{9_$zyI6tsX)Y%mc~!1Z#<%?? z_>>QQ=l-Oc=?l!YL8bK;2##F*aW-li_7b!O8SV-b_GRg0+rHJ zdAgEPGX$^Gr$n)3gM{oI?)>qgfSg|P7VYT$y~*p$OX zD99t0e0W-|X)xd1vr0F0Dr;I>^#Gf;F@F59WF?eiYk22xW9xf`h!abvG9k(%!=+qh zv=MjFSf8qcP}VC<|669)LlwFBxkWN%J$x;+wb>gViQ6|6osX6Ca*!f}Z7ywyTY}8u zhPu`H{X0=bsLV+~|HQh69(!;ERZ(`zxPC6)$nDHH?TL*Bw1>eQLYFgA%StnO5iWbv zGnUIH;?OUH)9BDHr6?GenS#&5V;eM4bP;qTvM2CuuY+NDBeCx%7&%mjfZ0=%+@hD- z>7^;AWtN5WkGVG?^ew7fQU%+p^asm&-6LKXTTJzv@OQgk)LQkwWYAP{GOsM{nKP@vHT6__q8_yqsm0}B$FikmF zt8Zo1wY_i*kNqsS)R@@mVM6^)m{w;q0Ks2o2dOa&E+BzFVYZ>jm_Ui}%j)64Mpmu5 zJdvfNwdlbkjaJm9LG}oOKW~_bpxZ2y<;f!R!zB-zBqiDDO2znf{O0}~KSqUqXqfN^i>rDXl9P7X#TDUoSR-M}pq7t7tBF6>KtU5!w{o=C$unkd zPEGgRT{KQr>qMapI!lLc0-1C(qcUPalN+sp&ii=vF;#6S^(Gr1tjsuTYc zm=*<3{_>tcA#%*&r%mA!$Ki7xUg-}b8S;3m`f!a00cgwoH==@iP&6|?p%5X7CDr7B zmG7o|uS}_BmT{ia)b*p_cfI?WBO0!>;<&T5qyCc@p4owQoM1Q}oMV>2sZU-IgCE z?-yiVmkNc>!Y(PK3x=f$P4NeklnXF-$SPtsiAlwm3(&ZD_u%M0niIv9?zSIaA#dMh5q zrMsbi!cRfE8V5pQ7q6+$x}Sy?)gmXFl0zYj8Y!bRVshwsg=@Sq{lomr%u4%CA5daz zM3JYe`F`d%l_;DW=dEVZ9dxtM(R~`1_|GxkHvj#>xTJ<4XHrcp6xjXkEVi(jXSRPk zBBT|2U)7-~gekskz)O>6VsinFTNf&#lnELf)xPwz{X;#q65(g4weNfKJCvHd`3@u{ zZJ_}#L}jHWx`cFL2lr>+MH}87F32K@b7nwqZvCf>2xBe_Pj}xElNHcTODCB*+R7$r zvB~8jvfW$!)VUfS{*P2Z@e6$bxSEM=>ROiSYF3ZbT}bf$3QUgJrb=|kYgBo znxGDe9c&SEQcvNbP0JM2NCjqF`4M@M$uqjRX-G+`3cI-_;C(lcmsCI9fF9{9)R* z>wMN#0QnRJu_RVYY?rK2h-aozr^ojx+$6_8Kr-Lwn$=dTkXBJ5S!n?m<}KNzP7?PW zji11iWdzyQ#(LSfHgg}`eRQs)xY&*$(~HqS=Ym^@Q-d!OJp6(a?dxY_?nksnF&Xku zWyVMY;l!A6ZYADvB;?=~hcTar+9$iYopZgMf|p7eNl)P|3lgcq9&{SL<#F)*&Q~_i zsqI~BalZpWNP#46Ivpk2P)~%41RR%fo!a?$PAi?lH6NMziP@ZADGbOTEoO{*c$?Kx zwpq*Ml)XFZ>_*!FY8v_2OLK)XP(RQGQ+mSY5b*tjLcU|u+)R)ETULCYxu;GCH#2M9VH^N z;o%}K+s=jkHckzblOT>xhO-8IPQxWgoq!%v>wL*7W=Z5MGUGtmYS5{J5U9<=`e-<7FN7x)G1 z=*aoBQa@ilmMAZqKGe|pGEJpm@WS4wJJL-wPfy5ilH=RE_m>hHO3@O&=9@|CXjx9S z>#&#tX-SKth?Z#wZhR|DGUMxvojF1pxHSs=WCSGPK2eonP>y@2BtM1zC~GlqB@(B( zg#T`HGO9kVXm;`H$cioQkk(>sJ7U__pWvbHl%|`6O$5tkIE_k7YoCT8dwlGInhXw zq8taDa<&vWG*jBZzygjK#Q(gJra)hbS!utZLk#aL#)7m!L29A(>;oqHf|+CS9FFd2 z)sV&xn$Mn>{Ya{Khp|U4H{T+ty{fHNz{8>$PZaw?GV%n=uGIrFI8M|N0zyB~3CI!) zHj>IM3)QGCw`~j$+w~$ZsyTrN=P0;sTywjgHgYwl8m#{SoaUx`1b@dt;>!f2Zs|BN z+iM^6kgD^ax~BBhni%A`1(ibK%`83evIoIFlY<4L3%fgV4uua-)!&AWu&8+NjhrBB zMZ;VF08GWLtZT`rUor|OCo?ba%lBwMZTb+WmYK{QJdHv>YA`3zu5&0P^0<3cH(SEH z7*}g-+m;H@AburvmssfB3fE){{i%sj?j5Vml*M1B46i>zd8xc#%sAh+Y3ID*<4NVE zZH#2auhQufv|q)n^I`ozh4p!93mlK6m~Q_rdO-K(4G08%#4?=jmT`bMtg0j;_|^$n ztGtLI3;D_-Gq0XhiwXjgP>_U_t;k{*H~ST2FqMVtw2;vdV=dtre||wVfn+E4PL`&p z)Nw16S2X#`D8Vq(XwC$jIe53EY)w`s3P0TSm5aKxm3JyD#_SwAYoxsu3P~vn&%LiS zF!XSmL_AD~A_==`Rujtz=E~J5f?zn{sXRylZ1Y5mUcBGw9vGE@2r(3A8usoC%D$?_ zk*dS(HFKvc7It3Nkq9Oo|BxYeG@Zl_D8_1RXr| z#A*;0d~5%hlLUID!RSh=Isy_I%Tc3riKrj0)Z+xp)4+A7CfOEkp?(jp8<8H_&V+Q$ z;kSGm2}H?H(8BpnX=y|9BDV&#IV&Lc@G=@oCUoj_~XPe^CBhxKiCgik@EeuBBxT=J1M+JU1$jVg*-@N6aO@gs{-?niS zf+J86h%K38r1UMM zk370ga3~5r;jm&<&|fMbsCXiaeCbv2go>-Fsl5+850l92bu)K_rN3P-lq8)uW_`9hq`#ggLBy6L#s8hGp12 zxqw}5VMA>^>EFKyMFYSc`!sc95W9qba&kYvbI^a}8Imq1H6$7M`OQIWnMJ;uy-0`$F8LR#Q~j;ZjY{lQ#adr)xd5!JqCV}$K8HL1`8XEe3k zD2^;JfS%g;w12oJw1tR8p(xr^(L(=Zp@Hs)oXPmunPb*DneKslP+U97t&{UonM+PW zpwdKSwVw%RQ7GKU&xxHps#&yLV55Uv>f6JVQI$^;PH3N6SsykYn4wY)B!B8Wukb3C zV>urGGhuXp#0{n!@1`1N;0gFe9kS_@^*!n@?(FqQ8%A%0f7wfKXgotbyG$sb{RBR< zBnhj&WUa-D`OXxaA1ww{SMVJWrhm9W^fwm35=>tW4h_BBGh($^aUvZz$_zNdOUz{( z8@ka;7X$ImQhKyhMQ90e5xuz~-GS2KHZwCw(DvtHt_ri^fFb&xQJrq%r1`%ih;U z(oC{~gLyrt*_77T;SZ`bw^f(2=zVvFBR>J=ahg)X7`=M?#I zp&Un*o_g~U%wir`b+g{^V)5^vO8I8Ty$_x+CmO(=nZohUj0-7G$6kcW=q`cMF_B=> zo>yihWXb&!5GT%(*vvOKljh8a^Y4*R@(e~l7k3wy$a<%&VPdP849kd9?Lg5F`n)T_ z6e((8AcYl6oa!>cJf|~4q>JU-iS8nRHvFAt9q;Ux{d%aQ`?!nO3;#uCp9!T3k_6f^5JbKY&ER@&AUu&q3(V7sI#nKOX1CSqN zaZ}=)rhHJe?Je#KqK$jgE-+fB5fmsZKr+RwF~o zGsi7Ije;BELqhqUpC7#IV&06|6$#MZP@GT0^!L3GH@LKxBN(J88oxSNh@sA)L zwTV&0$ks%;1MM-$BeiHen8*Eq$@vRqMV#VS-fgO}h2S*HajskZwrl)$_a^?OO4Vzw z$ZHwSI>M@s>UQjy-WKy1x2fHBxYE{N-+!ndkGE5O!+d#&R_x#g z2NB&rk&emubXB>?SQJ?sYm5o*J%>znTrI+i!+S!9i1@$ zwF-O=JY=#0*x}{H>Yl}aWHc;1s*%P5Duk$g~?MiDieg{kQLNzVAsV}*d5N>U+ z;=3z?Sb}dyJHCWds-p)R5DW8Lsu#Y32K5A3(h333C6Ko~>*##Pho>nuxv~F9u}*)# zm}Z<=^FruLFe-{`$!E@Q!^3`D_4QyJ9BLY?9%;&rPoBrhqEp;8>(NuC`(y3LrE*8D zcix&Qj>(3CEj-M1*Y_9wr0uhlNh;&!Y37V798z~FpkTHhTML^KjL!mI8}_Zs1)vkqev z#LM}jg~GCd7@B&$gYcH539W8DG4B4u981@i1U6n z-e>gQyKTUbmpl7|rH^0$d9UM$k}{I`|kF37JN3u5$76BjKn;6edKyEn3Z@b_;ANr1bX8WN-V)m`%3G6PBlWk z_2|_~tAoaVysMK;Hz%6y=JXhW+bG%b&6y5V0Mp_hg5Pra!Fsyae$!31+30wEEdXnk zFJFlP;m|{x((yhEV*Y+XvByGw;ckV4r`XGg3LD@NRHd@h7e6~#sRxbSw@2oFq~ZJl zD{6R>r9k~p^^kHt$JYVmu|1T6_VKYKt2{ID4>86C;3QkVvf09#z^WqmnF`ZjKel15 zy+lGNNPzBhfK5+99#>&GE6RR=VPZfwh=Omvkhw!E3d7K z)`^W|Vc*ita>WSARqmO_#3#f@g2wb?|9!>C=)c#6()~X3TKstb&CH|HPKZ5%0W&-h zMb&l>&ZKR>DD$Njc~@bda20CW$~8n}t5YQ~GN@El&l0QbR@|m7XB{l68)OwR8gE7} z+uxX?@p%#EWt`LJF>5A&{+=j#{x)t_db&>PZA=n};q~`;MDz>K*{G1%&c*1m!1Ix^ z+-?a&=2oD5zs$${^6r0?`hKQ zi9VgjKS0&qKLAeNUmMI$qu_slpwyRC(N!a!Yr1R6cYfcLsG4HK58RYQ*l`?r@OZ0N z)bDV^zWOb98uy29+#zu>YdJF`jUYF225)*jN7e zwPMh8U=$0@7LAvwPg5-*-*dQ`6B89~+DH|d2o`~~O8gB=SqOKImeF1~^0@S&DDAN5 zXMD@|Ff7dtvXrBemEU)fr*2Q{v1N3D}! z-G$1ve(LA{45VY!0V}v{EP+HzP$t5gh7CJG%cayxrl0roYwH}euTd%gl4Fg08D{Xo zid}>ncCLPK^k*I4@w>e3&F3Y7$|bRCf&o?kc$rJ=OV!I#vRs^?%1gTzuQVXsfRjna zlCG<$J``a+yGd;rNX%>VQ`4e)c0S&xPo(iNACubALSm#S#b2n044GQ@8fXPqi7gqE zJl)_uv;g0_x~i;)*R=rp3fn*MvU~W>z(U^~7(mdZl|UnxoU+D=YN;AsGheODIumay z2Y*=WQN3ky3sT&Zt>U-#{U7O&3qu)7^Xny0(^<#>6JPzViX!Dba}6Qp z9A;SFumR8l)c_Y_N;j%|?z7~HA@b2hd@QBh8j<`cb-iu1QW zfu}Fv$_mUk1-#r@iflPQAQ1UM`rA)j%1L6#xDt1n6bJdkVj~N)SiEmX3JyY0sS|a- zQzZlfw6v%f(gcp(^bOkmhtBo;cKskVKdQ}eN+W#Ey|%w`ijOB(qdMkEB-yg`crETHh`p>-T1>#(3 zr=GJ7*Th2ktG`IiED*7TeH@fGYVi8$J{k2^ui1357GmtiYgvm)M)%OeZ!QK#onEdq z^P7zVI7dvUJ!{^_s;g`soa=@~703**55KFaer&~6G@!v&SWov=!V9{%I*E2$SlQj* z=0eyk!4W`6v_GEQpJq(0&0~fq&rr{6b;@D-Ti6oMSN_} zj}w~ImYQR$LCDW#ZS{0($P~|ZqPz>HhF=Ah-zM4|KFC~Z-?FX<4Kp0<(mMS7W?&kg z;#4XzQgED7m*r`G)}N3zA5WLcJRj4HF&=ODYucIQp!&-}RP|N*?>Z`(s>Wc`v3M$+ zn9?4yLRZ6#M^6b#x79GlwlOE`qzHpY$CZNdhvb_e+WryesIh572ixqbM{xb)e;1s8hF@y0Nw94PA4(S3Hs#a&0(*%yTCk83!t_q(Xr* znnN^|M*P&}B+qtcmQ*xhobd1s))%Ta+j2b*FRxmH4^W1X5y!8ix~&z$5}bxoHE@m= zTKz5xTE9gZDnm+#sA7o;y}VMLF-a_>oHw&a*HhylL)2ApaR5bPhb%y0kZ|C9`|3aPb7_h#%IicUt==dP@}G_ z&0e7{6?lL5P@Zm2!zt$BSq<2NhGEkJ4Fi4z$2`e->3Nt29ubQF17HPEKS%M|NX}X$ zVtZKPI%i#&58t>owR3b@;}VG_y8MzAP{vIVD)dUb{c~}o)4>O15xwX%+$T?mJ&o$G zfXS>cWIu7ZUZZm~>09N!G^HV_Qh9yl@u-S$LU)f{Ty-ylT{ydZcEKbfpjLPDYUY({ z7}*U!Rz~^*vzweDmVaJ{u6CT>qbTI3JPSCed2};)WM#(emku$`X4F0qzN6eQrPLCJ zNt=#e<{qG9xL$iG4bbdJr(xt)dMh*KOdv=_l>Pb#U`vdG1elQ+(T=|AJWS!Y`R+VY z7-NrZmlo1nyzm@l`d$O4GMVDCU2#njG)qX;q%Q0Zv*f|UPAi7QD}}y;G5bat-84!_ z+6-$Y#e!#RP1ZvjN7!zP?WD#0xqK2+K=CZYKx)-jj$aJ=VU*f>uo~xtHG0oc+|e+y z%*K*$_1}oi)h`xrxK?LWk zF^+#s9eU&3b`PB1(c&b#B~Coa1RtIKzTehwa()~8=3be|l$}@`PIy2~VA={uc@ea$ z-h?cfgmWL-@Es~g>@y|bRW(t@-~b1L$90lf<^0*Gpdj)osa zy>C7BOgGIjMK<60k=9z;UAha+RsZDwhrHH?Q85rLeyEO8T&Ctp3CuhSxgO$&uX4+n5GJ>OK=N)tC-+P})w zWewJvQEH-((+5#tDtj%W9y<$3y&-BfD_xN(A5>O?&-H&gOP!Zj7Z46>k_iTU0m!F) zF!E!5#oy+`t)n~F(`>Iu4vX6c*=d{`6gdBwSz_AZ7Q*xnXr~(o>>FeW@4Iral-x-h zX0*k>i1}`59Ctj$<`NqDm!WH2g5&V~WENu81ZW<{Bgm2ABoQ^p0dAAHXao3t?RJO1 z1XU65&)pB!>R2BJFX8Pa{A!45g9EK8U}{2~D>Bx~PZ_*2Mj|W5KErXbJnlu8B~@8` zvR|Zn;vL4dpkJyCm&xr~ERvl`1`_8wm3t@1PSLf?OgTa&dK;k1a*X>1oZ+=*J{T&L zL!0{rCP(_U(S;}w>Ue6%LDJaZz>LQCp**|%!{=Y=S|a}d{j5Kl=f-XCrG8t5nI~|6s#dB^>nDU-iJj0YF7Vy@*r!9%_C-hWCy?PQk2&U%TYgUKFV_b%#vqq!o zF{z!VC)!!H3HPOoSY8{hNCx`Wg&z(gi#((!tS>ck_|}k=^iv+b?)e~eYDc& z4_nVjrYTL;K)Mj$B^nQ;eq!7mx#0Kg5xAZgw^i`Qxc!~k+?l+=9~%SdB+CIGIvW0~ znf1VT_1`eYiR3i_2;L1#Q?AwV%~VsCVGjhLQ1WHGg6B5}LfGoT)BvOhi% zjsAhRF@mkR1fe1*yJx@WZt+QnqYZBIm0=-eQZ1I-f_qeiNo|^q6gWO`f)NUl*_v&N zYo~W^#p^kluQB+RcX<$zCnDM;6-W$01N#5YYVtf?ZJ~JF-T$99Od)-i5 zFFKFJc@QB=!P>?WL`incs;tfNyj69lkDK7|H#>6K>5(UPzngx~ZhemuMs0^#KNL7j zOCr>nPD{6xaG<<0IwY8FH87#;IoyFs*8(|Mv}Dtop@AFn{o7s`n2N#;X4Ds^^`?aC8y`v!E zY!Ejn{zAW!OF`^mA$7{-p)Q-1Y}S9t3GS_1??nz+W8pqhc2D@e675G@gLbWG2NbH{b> z>;YwiqXl5S!*NXT=R*G30fb4E(mF90q+Mm%e7SYdj-I(BuNon`voW4!?l9D`{-#vG zB6d;eMCcPW+l-zMcW|n!C1jV@Ij+*#yQs)(=sdFefU4&-N;Hb2(+j7>>0R67Pbem; z>mzKzB-P)^Ko-v%B~$ln~)!oh`p~`DkEVx7CpoMhGhOgy0?b< zkO}5fao;)aHrYdiIxrK(gm}*fsb`%{ch}(k2s-ivA;-fqBa4@cs}sLlWwrH4wEJ=t zvd2rj?|XZYRqaNf=1~AYL3!<3ma-WwtcV8Z{Y@9pM87@Jo75lhFMZr1Sk1Sw9s zaoylvrk^ysIwBMGpHha}Dp5Dm)CL2z>lAk_#T`m< zcPnl!P~3}KaJNz@Zoz|>7T4es0>y&6OM<%>hXU>S{y7)t-2C@Dvp2i5@4Gwu*zUuu zcP-VfmQF@fm%9lDO|cD>>L?xOX}B&&s5gB%Gy?G1(Fx0GKhoa6)6+A|sZ?J-QHf@;Y@*L{Imcw{IWe6hb)1;|F#xshU@-21+w9*$ zzAJCmUBx-<<*H}K7A9ogD}Nu06J-WpB3J^zvSi{9Ns2YGbhnm!Rr5o#yy{3w0Q?># z^$+kC-ScH)^4_dqPv{MLU;waXy8*KVdv#Bk>xk-`v;Zi!7GUbg<=OiB%Z@s;$KO9Be41yqd-)>Jd=qe-184^Z#x2+U z+38gjkE=UKhI<%Z;d`2 zNye}l<@0*|ey(EGR4@6;Jn6Lnl{h03_(-ZnloE0#PErD<5Tv zu;u39&v6zy3%F$Fb*Z$D+;U8RGONB(Zb(a1nx%wJqdgqEsgBC8gN6I8c#noy+Z|EV zXU|c2MF-|#WYO_K{;XXFXtv74oLNSh*!`ldUYJ*E55OX;@v3W>`G3FBZG~K# z6>7(dv&Hj7 zMa^EB3^o);@D0gIdPnRARP$X+0o4epk&UVmNU|Pdpb#nxyu^++x#U@}vIEd^K5`Lp zdd|w}#an%&+7CRK4DXf2$A?ImHhuKsK7GThGeL9NYNP!RU@z-Id?X3-9bzW2P|8h! zcn2KE?j0F$Ae^5yN{yT>_Bkp30Z0Y7(iK}p(#f22IJBBKCflVo^&F@ilp;#>m%C{5 zc{IrJXVyba1Ft@m8Ac1~@(%K2<1D}7Kiz9`-hBEs#SVnMyP}!#X|b9nixbpgF@D4PO_)P|u(Yu^`Flw7 zfd?|20U%RAU3@ z>2O6roh1fPr)k2)-Lq1?RaHKrmM_9^rQ4Bh3|u4DVm#iSAxO>cFF2pWO~kj5gdfiD zb!9MBh_TYn)WnZo7!S-1cBlU|9}Yjpmm(Ge9jiTkYu=}7F4|SPjFu>144?u7&hfm% zBn}{*2(V(<92Wu5ODV9x_(1$zWXkO?-syja%YUK$hLMU%0 zXWf|Le3EiTXE1MG$%aodcJ2{Bqb878MV9&-CZ%41%GO^&H5a!ve({8qy9h+r#)=V` zB@e)!qIUWS!2zZ#&sEtjl2+Fn?b(m1(5xJK_!Vjd()ti%=U|1YQrL>LE{=F1-=ax7 zckmqR?@BVYDA%H1Pn$ZOEEZWPe$(zH!B2|$SYgTyDu>%BH35W_dW0o4KOn%@5d|t3 zQ!Pt^$V}_av)^g5Zd0nUtLdFyPq$q9nMRq{V}pDaZ;$@xm<8=4P!J381gm&&7A*{` z!8IPCuI93Cp1i}CnUzY4V=4(*wt9=!d7SEkQa?9NxwMjEWCE57+~oIc&AuJ{H`L8Z zGrWuM5;4{HfeU>8&Cl|Sg_)+a<2Spti$)9K_f+rO@hBM4(nNNq3>Z1VgYhCrM1vJJ z)(8^46nPV{>JPcfa#54BBimUHw|815go2ttkyU@ZK@mf$30b?d6%>Zt35^SD{IjUv zjcR_mXYU&rX(%^b9^2E9W1*T7+ThRuW8bfFsVsn}EFyj^nL}d-!hRgm;!fqTT#TP1 zTU};$VHW9L!jCB8Vl_(So?{XhKb53GA91 z2@bfsnH)UtvjqKa%Q;$jREd^;vaKyL2o%hW2GOgdF46iV&3WXghn@Eq7neHq8w2<% zt{{Riy1hSU6KxT&(R*_TiFzbrYdV*>Rwh6Domt4m@MDT9?Raumq*Sfl#w^!wuyDF2pk2Qslsz==N zHv(M^;?mIHCvlRX#s8vU43W)*koq1kplTHlgP1T;r=}}C%(^)9*+kJh%CQ*>PSVg) z^;08t+UdZ$?VM+q6pP?(8$y4MY=7uKfQj^L4qM4y5MzfYT~wjl6!qV8g+3LZnP4!L z=`xy0%0kRrLk1e`yQ0Llk4}`pgqdhs8CS$7YWKGjoqz30r@9WIqn*N@SBveCw_^50 z9ldDaGxi2IM#dfj4Ii85d|+FAt5wke^i_#N^ZXxj>DYDwhXuAn+U2YD#wx!lipEcF zdI$q>d#R>`Y|!U3d%<@%}6KQlvt^#>kP%O%GoRt&clkNv)0X5%lt zh%4OB-!6$XhG(JX>p^ebt-GP5tygoRO16?AGBcD5>xp)5pHcucl*fa=^hNf4!&Usl>=izk|B|PJi`0MBRXD+QHVdi?p{iVwUHbr`@Zi-*U~iY-xgNG%1e!%KE#4u zKgmAJa!g)GKA(ZMW3MtTlcVA}KGF*k6Kh9m_S6Wx8GPyOqM*dTJyM8SQVaR5gn8Wb zD5!hEjDuOdlK_Ei;68kHGwWt~&FeWN9?F-{(DxzcYo&zpSjy0>i0w&n{N{lRC4jZU z&HyRGWfdxrLLf)&boICdzW)*pTa%qHO;g_|9$tx>e8M1uD`5VhWN^6QTf&+vnIh*B zwVz!bQyU&+)HRZ9D});G2tcdYaFyA2zhulRkC+)*0#d{X#V=)hYfo3uBkSMhc>nq^ z4;mO{8JH4(lq9dX>x~K9X9Js_37ZIN7?bR41#eE?c}6AgDW#g6ItyGR7L zA)6NqQ-9p;arNnsOd`t!YVtsun!a5ZxlGGsm2vo!9WwqATMnCyyOI&t4A+zw@S4Vc4h?~b>ChGqH z+#gxuDbwu0PB?I8WUqd`gd~Q}4_}G>H<6w^eE+FWj@8Ssh%R;5dyizecL@HZNhc}p z87u4~hv26>Yby(cGPTF*@bJ)tDLsBrCkvh{{`=VBFi)Fo*OSTo!Frnnt5tIT$JBM{ z2Dr|4JDq7t9Q*ar#l&#$$+L9P6O`?}+!KtM_*_Ts=Ahi%ed`w)oMMtOSHMrIaVQA% z_U64GZ;b44hq`$ova6RI6O+@zg0AEc+-{nc@;=H&UwFWA$@4xFgNnwgw|6Q_$i=LM zon+M(KM?kriQ|ORJM49}t<+N+B(0Ei`Ffp(kPxA@X2|mn_`JllkK@VsWflskDx1}u zDd_p*YrsnM!G`YsL^J;d8GRK}9lVM#+bapJarQTq8DAoINIMI~k&$oPTBtMJI;CoL zNSv@xQuI2xx)OA7u6s`bOf2vhss|Tsp54fruvP%f;@z$wy6wQbat{r7D0-0N@|1;Y zz_|vtwI~?*iO~MTy8fe!uTZT}Jw~VOHT+*AN*dlh}pSz41250`VM(l7-Rk zH!OSpk=IpdsVa2KsX17~*2W26M_mKK%>#p$A;0VnvlwXfkkSpBnmnHb)eL}y!c@dT zxlYU}MU`{`Q`K^d1k|*@_ZmKqSw^&wi~T(UE)1wKbs|gK?gP~aUUDmmIqAnM0p;?e zYKK~%YJc|28&Lry_L2gh6TVwE`m@6ChR_G*x7y`-38;`?ldi_YYbKm*p1PSn$eC4f zB-57wo8q?d#xQ2R5iP9*3n;z#f^oD8v&~Qbpj{5XGe`G+E{6!1@=-?GbhF5g^HsY= zlozY+%T(-9WrmH{z+r?ujc?+jza6(#lW(>-B{eLN;H{cT3$gt`Ak#9F5hVOv5aYNU zslQ$l+U^c&hZtwLV!xROOi^qdOU9b}?P3P8H)%Y4c2aOwFRf5NMtZkT+E#7tGRxZ8 z(3PwzE4aRx`xpxfQ-{Dp22@=`n*K{)hpPdDTmu1Z<4;N4L8iL}rG5!~aZC)1lA%Ku zk%_k_<<)B+!WlHccn^OTD4xbFX{c$$mtOUb;Q5TFEhQxGLMbgI{W912fKq2nf{a|p z`^pTrJ)eFr(&)Wx%}R}*nbff0wlZ)$n-R5)RDQ%9dp>P6+uaAh4Ovtxw64B27A2#V znXJ02_8{;=okg^r;e?}2^R(WJ%2Ez^sBuRHy0ZMeZ;x$N7n=x(hzJAVef?@|mV9c2 zvolV}(^5ff;r3v;YyXy$U%M1(hDM}@e1XyMeg663HE4*c{yc*gex3q1L>_^lL-M{4 zYa{S=D8D=#8!CU5rshAuBC^}OS=NrCFz;P-NRm_@8Fh#qL1>bUO@w__e#SU@*AMkp zCb%m#<0Py0!BE*;>YRlvb^jNu_C^E@nuUw38JSRlHrX)1 zl^zHPB#fOmORP{5xH>hbVV{0XxA0x{l!DW)DWqQq>lkV!VeW84zcQugx(wv$K>8Z1z{7}}Z{;4!ufW*@N zP|*?)+O+Rm!$^UzI8SGh@dFJNPrc^(R#Iv=qh`VMla!Z&I=nVQ)0cIXh2{2D%(cTd ze>t}@rhz2Q?KSuIXFO%eM_0o~0@~dRszp|rC8A1!Rifcu);gw`B%J(6?o?1-OMZK7 zk2)$Qn%BNr5gJLL1flCymcu!!L8p%A5)Pb8{e+B15TvS4hwgA}<8R>F<7T~HYrL&R z{4QnY-lnFDb?+4;v5P;5_0zWfc0e3goZEM=zmHmU-8}0XWAzx~yYUKHN<%-T{*z{| zk_OwpUGI=j2GQR9_6IkdQf%m${G*pyP>r);(`bxc4%0-i&TsH248J|@MbenS@bs*A z={Ljzi9ODDng$TU;!ejcUxMPj`XYO=v4$;Pl` zlax@2KEZS`C;Ug+0pHOc5+=4qvU5H9p`Wd>_h!7?owS28%K`ak0a%nI0u?u{QuSKq zb|U;Qh8275GsFxSQbV(i;^%L>*~dH$+KYO(357nnBhGR0`h3l9HmKP-ercqZv-4$J z3S*Xf-25Szs!SIB>1AF$^h7%}vf2*e2xv`cn*( z_YjY>pk&AN`W3VdYVV0hC+CC3#2%^)TgJOuMmw?0%~`b7qf(97T^`*oslJoQi(1>H z-&DfzwS|Ia9PYom8r7{WJUj#jHwT;mPsfIT4vb;NFt*x#P~08nDs&O*jAJPOM6OTDUaDt-*uL4p|a&*AL1$ zD)77{!*|C7obm22cX0ccI7rYXBZ51TG$LTdP_r*|dt=MkGHX_>?#e16g-UeswW}r7BxciQBvne#ofoRJ8dS z?Au^?Nq~C0B!@nsX7L*(BW8!zZr<*4*ZAr^)w8Idt3SolF})h4*R@O54pDA9A6y{` zO7#0~%m$*Ud%q`{hP1e)!yt2hmS@k^NX&9Iy5)G6n4*uRn|Y`ztJy^QX0M7ROjhmg z^cp?Gsv;?XHe;{Ln|5sCntZ!-M3h&QQ5_EHG=~v1Wc1>_u~gOm`YBnVmd7ZgT(^46 zEYP;q5l&2mDbTPY-4z;2{1gK#=kA-w@Q1XMnttEJCo__xE>;Q=C=BO>bo)AcWF#6X zz!GTJ8^;RGw)m+XI)lQ-Yfk^jO)h@lH*)?l0&1)RESPmb}ETNK}w zULl5$eKhr`Bq9YvtYcsG%6cpf1ABGAb^N@jc>Xmk`TEB~xi<;t#iz7n&WYKM?}VVveE5{`S6>b_G7C*(8@_&r zNG|(~muWBr8ozDDiHh3XeL(x#TwI%kEhPUMm$2%D3r}zse=34ktzx~ess%O3{0%u#9 z1ezj@SxBsUA?=Cjg|r{Lbiz~Z{o!}^flEq#!T?RFh5;*CY*{8Pjzi?GHP^%k&AuQV zytMlF4@&HbMHQ|udMBF1rNktkiA!|HR?^0imB|y=*N;oQCZR%?T^nC`{?hB1O6hFW z$B#7&sVj10h+-?;a6qRPAaNd9j1&q7I_BlVL+n^c-dOX>Zp8InT|ZSMEj zg86qhF=ostR&7cLd5lwfZCd3nH>yvh1g8{0@vm3s2WC3xaUj;CwrSnc=gwUY{|#nf z)ZQZ(-jDRXce*fyEn6$=9Gfch7u0Jw z{(zi*wr2T8r;!h86CaWrx~Hc=oNEm<(3nG)-L!nM*RZV$dPs79FBQO%P2y6)k-Hu& zbUz!0v`tLWb4IBDdeDXDR<}W}W;{id+K+W&*6*2ePbD9!8Hd_aqS1r`Trkq4GG(NN z9)e@E1!8ApQbY;dGxfG8Li)_`yUtaD+;KK8M8z-k4R@e!SVdP|t>fJNI07hjYR@dn zLlz~E-+WunvEJMVBx3Mjcp`p@T|BW7|xb!`x0bMNDO~@O~vF3 zRncOh8v#N*Gi8ZuTui9Y$2W*!++&W4gC7c4%#?1Lv{KuMs^y)*93NfP$4}14bw0g5 zm(1X#i`d$!d5DdLQxxWh8d8H7cQq0ZtM1V$)fJ!ht%mgw_{Qb&w%<+JZIDPf^DAo0 z1NZopS0~j_dxqqhA7TetHUjIS`Q(y8Q(n|2{)HJX)RV8321D$lh|y8+WJNQI_gC7$@CWRSsu zm%oeIz==LFw^>3FqU&6s7yaQbY#~S0rI(r09gTjb4o%)*kGe=R)Z1&g)+WI0JPh#K z)U4c74esHs?Pj>%VksvoI;Q#{E6MDt=J1a1wZtP~vqmAeD>G*k^KDh&fT=4Ho`PyT z&MTNd_t;bxc(eTRuWWmT8r-W*ua|rE;$raX{g$9L>;N8=IsGRZ;)ezx9;6F;u9jR< zOX08J1V4{#1xmaYYcFXaTPW*Wz-@_j)={{|!i7xfkTJMnqS5;PZXnK)EoM-D#@U6k zF@#5RE>1}kQa^rCzRlB|yXP8hwrN#tH279rE#$4f;~l~Avg}SAeZ3@nqKu>y8?yFN z0DXLW4bE;#aU*8c>z{PMZt8gyNk2M6E(ldi`NvM51Q?I@Qg1_iiIb*(qgQ;+j@j!1 zU|K^%hkg#0vy-!qE8dEY-Ie-A+i$q3DOO$9hmrKEnXxkvg1U_5;BqOJ=qkc065DM) zIpgR@U3I*;I{yHIw5E$t0*09%mY_8alNq)e@4dgZ#97V0);6u>;5 z;{rfOsfo@OQowjkc6=+b=hiR$4`3Zw8l7Pn|EY@_!ZiycB53rHRwgs`UnJaEk4_2I_b0-Id)J&hWLkWU-L)|Oi2bm8$KxpgepI!q>Zz&1G_P!lkvle^@(geB z!2F^d=|IAFy3fHq{DE(*#dYbN`m8V9JlAO_?#)z%8cXVr+bZbLXSw&@yX8|x6wS+T zymeRhIeJ|5M4`@}8!bXjM2jawqLhSag>&zDVk+G#ENFg-5i%bBL|CFAvkp5RJ zL7D=4xhbQrk0;|yr9%tEO7I1WIs>5)!S*CR$Z!OXrswVP2czxX=Q9{)o%2=&2YaBT zbgxeTrQz;Qdw{XXB>@$`-HxsK6^1w>Vq4bKgz(wJiX**#Yu|ScMT3m|pf=&-%9jSb zdAMfU)0Mdxuhqdy7VRtSqw7oYrDNIE%Jv;Iev$3Z0{58Nym1c)YHfB&zI34DYo3dL z0MmiL%nHx5w88Y){{Wc0w>)1OJL&%y25Z~YAKavWfcrMBKOL*rzbO6zQrG@~{{i4# zpI`q2IR4LObBH6C;=89KkJB`x3KIha2O#7fe70^+trac8Akn|uGz3KK)lZyuhW%jskN zI(3uH=s0h4lfa{kq-DbpzUDd*rOLy3vp23k`u87zY|O94xU1de*G5(wrF&K`PCA8s zLJ&y}D9uOagG_-J;Yw#I32^n6+8GLY{$m;RTgSZZqvQ3P?P%8RhftkwTHIlT?UgLn zh!2&=gO4de?+*np7xSeQ$9;xweEE;}pqw)dN=?_BA#1-Ni8a7Vu*$S>Z zYq-j1Nu^)ZXJoK-zj-G~#&n${Iy~vC>m$Z$ovelCIaKVwa@30@JG8GBPno>iSYuno zj{=%nd#FTarZT8-| zuTEk~+u;c;U%3W_kWFjmXphF^>;LgKYlz?KhXWeI~@OZSSm#Zm%| zzwD5STZpF>uq8V9E4pYT(^eM>LZ%tdm8KQqC@$>%!M{CBhAA~viF1eq?`?GqeiZ!w^d9wCR*@&tcDYIy6$rtDFQSVz1#(c_key={D@XZ z53+oJd~p(-%X-X%w5~X^pXrv=xl&|?m;5iaK2N>uiXQ|mH&h8T$Vz^AV#JJGo$8G--Brm z=*RkI$3ACmjV5$@6_w$HU%UNy1w$Mf5%S_2HN3N!<2NZlf;2J?SyU|p(Se{!FAw+ksLXv1@vZ!q`KUY}g) z$l)J8;?`fOIh#!PG%Q84v)b!kxQ&B;Jf`sHg;TW=83 zR!mzgnJWzba?{qEk{RJWSbjAvV&wC$RJ|rC{Q$n| zt8OQUU5p<8_~Y)0L@Vz(h-PbslY)7Ps36x5L6oinNkjahJM#*tSRiDx(wdG!QuA&m zrwc(>QQ1$&r%H$a55RKLUck3Xm2u*)De%@rS*pP2zXlEQCzWO|%1f@rKnN_?QVr1p z(;0jde=_@Ny$`!tLVJ~;tGEOZ+?Z}jgxlha7+U9b6z_<;Nyh9uTg0!NQ@)|I2(aNF zVfp=&?4X8FuK|~cPUOi^vrEJ0i{){(=!7uA3$2|ViyQ+EK9o@IipLAsHNZM1d>VT+ zqFy4^!oyzr*9x^``5P>tBFn3Z;gXKlx8N|&)QNUsquxzzc@7waZ5S9T5-b%%IidO>~r zTFBqz5%mrSD_J`vc~P;G&#E5M_|p1zh7~l435t1!W4iO7scSRoixD&ws-9YS>Sn_b z>9T~w6Krg7&nwoCc*QatP>CMI+?%Y)c_UkTFsIErfd@@ze7Y!^ zM(Q5>T_dN-Zdvq(SB;U4<3Q}L36N1tuFWUxOE*11?s1p+Bo(fd^(2CG%sIis?XsVH zs%@eH=-p{Zcjb3G;w;az0JH8;AjRTXVJGSGm+vAKV=iC)eYyCirwhfJLqiS3Os{dF zm`~$DAd=L15_jPi49`I*)Dga93o0@Nf)46k~xsEVjtIh)# z^AcLHf;b!D-0DbIA^u2)YJp!0x=IOG0Rwz~d>>^U2eY?>{SXG(hqBZaRZw zPmWHYDzQuG565VD%qF`xTpgQR-wquw1%}x7cX5RbPKU_1(S$;P4U}=)$RE+(M+6w6 zKEEXnrMM6syQtT{Ty-)ADO)LTYO>CM9iI^#Zr6Af$(YkUC!i5wJl;gxatc}!wvnWn zyuG}nI^AR>Wukz`XCcB*hIb7_&*KK7={}CUj9AReap(u?$e0+jWFG$nlUN<633d4? zZY!n$zM4G?$56WTo{RDK!Bh&WI=GQ&@m_mMp`7LmqVC?^F^07k1FTiH-M%DNEaT&# zI0{C)cRyQUUkbW>-$d4iOJ>F~w!x145xbgu!`}ddooy_oHkmPPk36T}o{@<&p0l2v z8SL%pfwaJqBpTbIh8XnLo1;4UEkWYY6O4T^UlAbYt6o%cn&mr)Y4SH*Z-sv4TG0`{ zOgHw`%Yi~KZYW?|K&_YFE_NwPTopw%L`6pF(K_Fu>V5uFAX4O`1pyttonCyS#(5FR zwy`N;S8{SSb?jBoVA0vEqU*Pb1goT=KUqrc-#*+yc%iOigI@QG`QIc{WCkGmxfpe* zgq{Vum0mOgZLx#-0iP=Rj8H*t9yU$R1BW=1o3IY(?qi;M^tQJlr(sDG?PRYB#j@I4 ztPnCzy1&Ik5;x`SQr54&u%68AP1rbeK~J-n?TUibv^hrju4WLE2S{_+0)HW z!8jlxJvVLBzRO~%d@hq8=IKB-yA}@Z1v%L9znH;as&lu*EDSb$6t!3xclHFj*>Q*( z)udepXmsdFYOwrzPj>3w(w)BVv*|R$N5aT$^Jx{xc=vr{10iSICvz=VW?zAZ0XtB( zDj_Ax%sD!?DK`P{R7lPxL!m#(B|gPXkVZwMP){124o}Ef#wJ)$l%^Aqo2g1-ECys9 zL)`2HKdbNFDop#%d(wOyPB)1dBUt#+N^v|Syf}Z}?vBh&W*=zVG2AtwIgJw#B8{Zf zKqrv4@n4qqOP}8{_ph6cjNtn0Zqs4Ft=2$gbNz*8bVGQR9k(Bt)VWYxi#NTndGZ?P|KL#YL!$>~3b z=esqMuprU-qf|N<3-L`T9s&ejzDEIe2mF$93A;O!?=or*0X9lsubVOwppu0kn3tZa z_^7UmSB-d-s2pn`gElD~6+=KP9%e>(mVy&{>$tWotAJmR~qcNn_EE`3}u# zD<34Eg=mu9QhCXdYC^w-ba?RR?L?g9>k>(mw(Wo>V-7M==3dI3!a=0CIEeQ#9J znce?!&!PKc%VF;!^ARNO3TJI$qrK~j&cRxP_i1(;H1X4pmz7VUfcEUP z|G`P?vJtuic?D+{HPnQNJuy}oRtMcDme z;K%DYi#;SpDeyJ%mZM&(^XOS%Y_ZPt4k2bq5v-|cs7|DDV`jPeO?3sQHhcerZM;Tt zr~)F}4#n|3HQjtL;a3^KHAQ4(BIn{aT2<`~0i99Gr=fLmOLnpMT{k1M;{bSANcamb zwtC4s7;|Fju-ELBk3%b+eVUBUKL9rqW|P}%rxoU9%yQ>Vdi3FkleUC7a5l!Pd^aO` zDmC${&dHA;r^xVzhH? zvF@)~n@6bKH9x%k1+iE32(drK`*kZ;fH%_^ebOHHr89&eL^xIE>WG0VbXq6r?e%7J zVj{OD%!O|axR?5m-<2MqZ#ZUZhHQqfSQvhS}c(z03(x<1GLgv;qEqg{<~2@J>5YNt5F{nmT6T|9nZM)Q6_ zTy->(pfgHaz3twcfbr?Dw3n z^!GezVk5V_f6-}WSHVbqVcat;Vq7eXu8w%gG&>Eij9oKj*}L5=%i;X#r^iMv4YG3p zZMUR;d~Q|g_2kTd)-X*`bqAF$HR78DZD{37z32UM+dqINy^ELK?|%TwhPFu^F5Kf(6Cmy$i@zOjsbkFku@Xp`d+3<^%Hy|S zQL@72X9v_#?WpRj7Fcl-srs~07=<{F8jxKWNS4z^v5V(VoNrr5>o=vJP6rBd=%k%& zY#AKfiBJn9m`s6MP_>l8;GX!SN}8dP8BIe|IsswEBJb`|#I3^5euT#0r|t_UK78@c zFzy9>d+-u6r!ntU!|N+Ym<`;Pjwo4(I6gY^n3nz61UH`UiuWQI(1^623!}^I`Py;k z{k3$x)?0}eT#}N;z_$y2&$^ceyCBt~Z~jJQZLbNq3{!Ir^|-sa8q<2)L|0iJfCM}y zRoEeIb9?*7tN6(y$L3mZ^-L|^(!1eIh?^{mG?#S&Ik-wZ%9I}kR29V$OLe{B)NMj` zD>Pr&KluCRo4|%kzi`r-zO?mSnYoJ(%r&^xv2xuNYqXL;5O1)TZEJpX24t&ytmwi} z&6lK+TAi*ss|39Ynu_j;{{_QI-Q+$vUbcOHN@ofxG4M7l^oQh7|D)o z_=hs)zGJxc5@lw?TV{t|SKN4-72#n+d5lM97e4oP`WNb#m!CBLUM`hfjLsy4+^P>7 zxcj)$r5qA=QlCBobsg4M$%X1u0}ZL{3TyQ%Qw6ZgOaom^UO&L&)k$04)b^Vtoh_77 zJ`Je_bHWruTamK)%mwZZ6XX!9tx5y}hX&1Mq`B~3a6%pC!UX*CvZD|ZkR zj=b8cJ(v!bol?}vY9i|JB$-8Z!}WJ@evhdqwp)4PihEDT)-{z>pV#3k{|m@u!`qW| zLKa85;%FwqNf?T~^rcf&UcEv8At128^C2n6G|@F>ux0I!Oy*2~1Y6boxde^IRg3Ls zzfI6%!{}UrKJdf+))^|5K++4LRB^HT6?!mFU?dYZR)qfXlo()ptqY(M|bPNakPkb_7}NPn0Bw zJu%@A2AM95Hq>>I4k3|y%0ahFT;X3Zer)=Qx}u~hest0qQ^_s_M>C7M8|phzOC{rT z3`se15m5(?)(rC1d~rr(+)8k1sHJkD8s@zn@;EA*5Kwg zMP-!Ct%4|uoyu59Pm-&CJZYo_ooF&Wmtu_z3W^UVCCiq6uqtDtg=MG5@EcuqbN@Z^ z`X+vm99vb*#>h>nS1j%4YnKsz&O_mbm?rX_WIcZh13msYz2%4nMC1-;MeGFrvR1#K z*;X~@>Dx;6CT!`DHI&!K^8DlDaW8~G6=C+p4;giEl>F8LgF&sTdsK80`e~1HWCl7T z0x4*pjO?b?Dyi@OwrO!2qSG?tU*vJMhsl-dgt8);K|v|r8h@{Ud#d1!dC~iIUTQJr zSaN<7scvUOvl&yW9NfGB?HRdHx9!u4jj|DZ|5EXJoM4lEIH7&@-N!Bh17>`uTVURqS?gu+*s8)&vVrclkjDZW?W5ppl1f2Waz5Xe+ zxVWT-%{4Z$4au{j(faNv6p2UbM+u0yFFd9q?jl1brk#7+*u^eBUeEOO+G&*10aSHBl&7*OQjelyso7f?`_i4y(gVeW5bP%$w) z12xed>Sfd*QN$~De6>_2ifKrl?j*)s_u=Sw<9IuoA$TU%)Xcw3+-s!;c<)XqCr+ii zoMz&;`0?36G#C-(YVxVj+()u3vJ&^aVi*(RyKo)}wkrZ(^#{NdZk04Gt7(O>! z`_6F|y>p=MsaH*B z*Me8|IIrOiPBCv*F~2J@R^ z2w?hN$Zg!~Xtb>Fy(wT6)YbK03GoB8Xw*-_i0lGqsGUQ$ZmDIL{D zYHsb4K`lN2@VX#xlRiqCO*Ymb<%qG0LiAD4Ya4$uI6 z=A3o^DKFkHQD-+Vxw(*i_-9&?arv3ZO;nDE4?4XYMZk&Go5-ShG|LIYvol@XR2KTI zT0eI-N_&AqA+e$FCeKO4?

    N*LWLyy{e23&O{bZ>Nq@qunsc%k-yCx3);1&9qRM% zW`C#&cD~Y2|6c7v^jm$w{*Ly`@D-F8I*C1ek`zSRRvi@=dVO>Tw$*$A96fQ<>NFby{jMi2)pu;GMYqYjx#`9=uXQIc?yw$CPYlcD^6%}nwdwp7qP z@Wj`Q%)$?Kvc>9!Xc)j{cDYdwSbEx*i=#Y)0cMP z;H?(`%kL!lB$bQ>K3D3GdqGfS8iP5xlU+riXq)M6aA%&Ca92hD*m-nSK>VrHawSw+ zDNGUsxVCR-A6>gEjPw$``W$z4zW{Hh)1}9?$If{3?e&N@B`#L-RnKpUlNj;~UTRA| z>(!k5pdp?8%!)y#j|<5Rb$(fF@^#$3xFi}P;#7TVJkhB|Aj>1#uK_`&?+8!}bsl_a zg|oNq!~tFu@m4VFW0BrCXYJ=|zj7}G%zne=dVc;&m<>Dy^ulLrZcVatQQms5_9`ix zC8FA(B?mUO2HG3#(>#vU zV2IZy<66|`Xx{bdO^pmCkTyE>uD$rMmgV1lI0XjM(R~65VGjFU75Rq_nBY81S8-Z5 zz?>yMm8N%XH(y5HnP-V7h4pp!4^5fPL?8uYCT3rZKv5f%`7CSHBDLM)GAn1!<_$>m z4Qr<%MvDR8v(b8(p{GQ%ot*;!OdWn>Qw91ZakhmgOr6Riehx}Bq$y=r7g-kcPtIHH z9BQdzJzutvrztT!0GW20aa7H$fLBsW<>ojOi7;c#tp>nQHilt5O&@y`k3Sk%(YU{U z+FRgul^M;jf|H{1UF;p#>MK*haHaLSw+fk2c+PG!<3Jdd~+!3ai z3fDSI;9+e>ZgJ!!83+T;+7{p=iw`Vb|D3qJb|JS1wes5JyZ97ieR|yHd`ZK`Y;$SX z;*72bhC8)Zd>^#d?LJF+HR3rpWsGQWX8Op?9zK1*m}8Zzn~@mC7?T+lh~8sXOw=IS zXlE1<_}39zlbJtJ$UCl+1$UQxNPI~qg2YG<{_ONnz>`day zu|&xN9@%Ls#aFZ8=ySRB8QZ>N_^q&Kj(fqeS(d#s%JGv*C#<+VI63|e+ta?l(mqh= zU377ORJu%|_Bz3o2%6Kx_NBmi{j6s|0m78_$Ru5E#pfR&rxl6~>y8R)q^Pne73d5{ z&EZ;5(V5w~tsfmF1l8~Gn7~l^IM*=07(d3ZE>=Vb$)?m1JA`L zYz+divB1U6p#~ujv$x%}jWoR9;7*q<_WJ+f-ia`8i{)4hepwLw>g1 zh-tBF`o7&P*x%y9taM@Ig~G={RxH!`La|f__wU->L{q#;CzWR{5X5xD?+WCnDlId5 zR6kO2iw*WGI7ai*RBT+`tCo}sJ)L#C+a}>Sk5g9mJU%H1?9|J>#7M>ekmX1msj<_b z^?s)OA#tmzrkVtW+JT*v^GAJh=k!|GSBN+v7}R) z>SmusF@e(6^$mRFbH`O;UYZ_xMXsP_PK>3ju>E) z*ITEC%jpdaYtewj`crvGBRkFK)dGV5Pjhb>7Ipiz3lEYiAt)UK4xyxU4-%3}cT0E2 z(9+$lgb0YVNViA~4bojhNHgRB18j`@{@?fWJn!-DPkZmLGpy@c>s;q~uJxOPW5%&} zeAk4i98%{wv7GEb%eX(K)0S%S8dmV_Wh57_RBGZq=dyZ|+nl*( z@vzbtmUod;Hg|^?56RF&)^nUb0lMl2N8a^Gwgr5FX-Q+@^X7aV&O{vZtmVI(S-Jt_ zu^*Q-_;fx>LL^H)Rt6>902+khEm+}?g^YM4_3IhEC7W`KFl?xr7n-2V#03PLYa5zE zC3E=6cGBfgGD5O`Whq?+y$Q=ZuNo*jgwndra2hSU4<`Na9MUWeP2@8)M=`x?>@^KW zOkV^~yS!aw1tp9eKH9vWjQFuxcZaKfJ4#psrOnjAdCZf&tc>TmjuS~w#Vmz&#id4e z$=xsCxKe^~wVRZMPE7rb(B?+k(LKARZ3IzC7pA7Xk=#{f(TiDU6xps-F_oR}2r1o4sZXqBY;^H%1l4;QsC=Iksf6d>$)sv|-y5^TM&Y zx_{ETDbK)*GHoM4rpK^eYnSUAkPG9mjKW?b&7h(V|3 z^+s$0DY^Kf;B{IQ=J)}QjxSPm%irZOzs3X^Yf};E?<*NU@WAy;R;*WN91eMRNTK&+ z9Bia{Zn+0l^{E2|NrP|^aP6HR4GTnce6sB3*zT}3!=~-#&FEG1jjN5$YTwZn^YiG= zD7F03iX@B>ElM+~1IW4zD#!=ZpyUQ%M`wQn;FJgN(eCYcWxaqel1oIYOKRtzs`LKy zn`IkXe*JQe?xiUto51gp$Y|)aX2XT)5=aa`2kVIJ0lQuSU}}jEc0f^a^`kh`qZP-m zd+$ol*L53`=6Cn!f37s{xyQgDy*~YO`qUv;ZaF={arSstBrFnoUrD-IqI|L^NG4aB zTt4#EzfId_*(E;bWt)I#-gjFTnj*~YY8t!&a4XmV!^i!f_9*$|JQ346HH_K~gOSXS z8i3_fF&boi#&>q~lMAh>DMsu1+PtF1e4o$57Gpd|v~<6{ljxP!!YA#1d4Y9;0XDS$ zxMPGSkyh1SbY{;fsphqRc=l$gv~vjVy;#xfwaD^{sog+hn2a5@+ZOYIZ-K8rQ_+;w! ztWiFULw=-NtPq+Po2$pMypC;x(t$}%j(?(3;fB8A?unOdcsBm2KwG=A zO;Uy+$-sv|+Vmty3xm`xaO?zZK4~ zN&HAM)zQhPLkDhI>`TGId^2@mb1gb52D%%nNrjYc!Zb30qzB4X*%};}&UCW^|2~j7}$eYwL zZf1C&GOEnI)zNp{cxhui89Mm8kuJE1}t>h7s^2PZdelxvpaz+K!+YQoB{@24deWv zPhX>vjVe6d?rU4>mu~N3s7F`%@gIF*4)>i@f;LW6K+V!AYK3UvuMI*66(?k5Yl2-zB zp-Oj(hae|wMe3`zN~@3ayT|K=s`C=WS-iMOV(Tg|N(u_^Es*srKgH^0qomnXVyRGi zB3(8gf8J2VaE{-u^*l6jrMTj9>}7?tiOm|h#kVL53QC8&UA$P~khRf9ry1(7Nvh6x zm1uqWau(q)2hQ=@Wyf_jQ-J0InI0@q>c~@%S-i=9AGCUO^#hKr+k1T+FVA>gUv%ZujO23F^f-UC;W-k-JD-C z=_wvVr!Fz$Og4Ur;tV;7Msh`Umih@O?%5)atspP0#0OtT8?EgNakGOgl$b&N7nJ;s zMO0ubeD-{&`>zneJTGO7sSUqBvsZp2R%r_^&$A{UvR12a<-yE(;{S{xOmQJJyiqD+ zw*~F-;woRU`n$A@inrr&dBO5|PzqKI6!NC(<^USLm!UzLRJH|~H2h=_b!(s6v+=jJ z>!pycRzpj*`0qbUG!pnCkNt(?bxm z1T%z|{fl9$iRB;f(sxF*TMCkznmUBO*WlaC@05H+n(*~Z0U>Aq=!afhTr|3B6O@X2 zcVV|GWxL%DELQLoKkdsz43@114#l42z1F(rnpk1m<@w8a2l%k)41({_l~tdX7$=rZ zZ0Fq93_PE8MtxAyg&Y9dD7sV4GCsT07WJBE*X@4BUfbBW^|Y;IT@}LxNn@jMRe;DA z*fgFCX;0I|z}+Wn`r^|E9jX~Qi%16iR~S23F9|%Igau_+DXpyzl5pRzdN2Eb#F?sY zwGEVf$7AnP#x$6-YLZ=h3D!O)+;cq9Z%VI{a2x;yn}^HL(zXfPfctzv`aatnN$uU6 ziEI8Hp7#cMu`4?3sZ75eiiJLGlSJAa>KAG(B*yrIu#cwGd%_5asSDw1KNi4b+Z7IT zX%EB3Ub$n4KKgLRFUWHP0L@H%s7KYiT?b1(--~(d=>3qotzV_%Az*2L?vqe02Dj0bK)^^(y~@AyQ0DYpZMfdp|)CA z_d(`y`1=fj?#6Lh-b2aZ()e7=pu7e-V#=k#gNXUk}xUapOc1PWeaM7h34*XmqzjS`GVKJ$T;B;$Ctg5z(^Xbuzi+YEju&`U~ zIN4~%is2fPQ?|(6TV<$M@x<(|K0oeDt4oeq&-mf(-daxlClXcplBTl`AyHwzZOxS? zv+*-ki*!(d{1#IM8oLLbrZPHDND`h?ce&%oqLh5lXAdj&taUc~L5rF6<-^8hYi4ez zBUfGTaPV9H?srL&wj=!WWP?RA_v#N68$C^{$5^ar(%%RRGYwQj-axSfhF3;Pi`Dj7 z3L%$j_M+WR+__9Fs5`q)sr42DZUC2x*`gErNJ+!W-dv1x9R{6Q4~(7$)h`8Klp5h5|GGPP z=uiXCUOOU?JuoGPKH|PKf^Zp|Fq6E~oq7;9#t>3TL`VLG-I!9(iiC>1v?>(LgejQvb15u1p_Q2Qzwk612(D|BFric z>n3m6ofgKh3f7{=zXyC&S5Q!8;OpA4>ZhZjqz@F{05Yz>k0|bar)G}~rTv&JXuwhS zgA|sD-;t)sf%1aVaXFe_GXqq_UdnG@Bym@jSW$$#8-DyT00nwT2&y3HWXXG2`h3GC ztHVYt6)8n9ER6LIi%I0QUQN(jzGndh?R+Xp;i)HcX ze#w}YDNN@XALlx5cU>0_plqig5q!{#3XZE4lssc6ww7ejG+$?UBYbHXbpJuL*2nqi zTn8$!z;d%4#%d0Lv=6Kku;3rwKA7HqG~$#IRZ5s@Cq%3K%JqvpPi+m&{CC;aLZz_) z+qk zVLO=YxD-Abyy*7C%nQo;dPDc@F%G{oD_#t2b7A*_qSj4c8>vBT#PBwmiFJTKoz{XU zF$xS1MLWLQ^>i}?Jq;7KR0MjN%uaHxJ85Ua7RKs*xhCrS`Z|?P7pQnc1A@MELZ{#C zDts;~BfkMybg-M)M7anQ6S+#uzLZ{=AKf^LC}T?POjLWgn6(E=y)f- zP#zsgUM?9B#JK^mF>e)>?Bx*}XJnXb&R0Bi7f&RqzoQuf%&&Kutu4cVv4hoS;d;3S z;q`Y!$QeYO;yw8Jrns71G$?FmWL|#<^)L*4#uP0>@l*~^L-X$~X()~PfmV4^rqJ{n zavoMD{(54-$7FEP@i9Y@qhYnE!{_R_EHum{mdhlv+x^ z441P4Ndl6mRh^qN37i>1PF<*|F!F~NGqddryb>!^1ULqhKsF04-TF^F#(nkfj#5J- z#SC`NrQ}0%glLi$iIyQgi>_n>7qaY^H8zH(jvHmtVM00h2H!vS7gx)~HpXSirLQv0 zuB!<`XV2;kB z^qXNZq$$q`m1k0CW`(up+6%k&(9Mx)tV~VwU zsa}|7hm%Id?H2Wq7)thcd%stlo@GDlPUk1N;GV{%n76EzAAIp*I}=t_{%m#N8n6DGjOn#iFMoEU zIgQT`ZL{EMT0?Py1SZ#Q*zxva^r!hZ^raZ<%vbNrtb=MgM^5t|Jz)vY+^9Ax;S@U> zbA6s%8)u60WX+=@%#3(u%uzN`*ubk@Q=w|7q(kFkvNrPiG zY{G)6#C|V6FdE(v4;NT&6~<2tK@X$Y!%}!2PY|(JEaNuMkEq`vUfz^7TCrtUVJ48P zQB|`Goi)1i{mfqFN)+<|LL^9rywCnWm zuTfFom}UBgNJQjZXMnr^`Ed#U+wHo(&A}Vv`Kvh^=-b>@T}^Vdenhlcx$US1@8EtI zkm-7!WxJZnCsi`O$k?8VR+(BjaY&>X_!<{5h_5b8b6uZ>5UI_eiws#;1xDgK`0wpL}wn1+(uUR!c{N8cta9>hb~Feku^hR8QoyD-*X#M@L7us|#W_jgGzx-|5hkLi9#%D|L&{RvCgeDsl9mJ0tnwpmu%R z8$dvloBZoGJ%CMA#&L3$kYBq?Rb8aH@B4QOjb0G9Jf*g|1Z4}57+-!Bje2t2YHRJ5 zE4pJ<_QV#~+JRK8PE>FU(UElMp3zD(DT^&qYB|7X`?P+Jaa4aNUChaiAF-gSUA+$T z+3gDp>^gkB!2q&blKP5tA-%7@$I6;d9HZqaf5i--FyJL|{7|{zoLo z6?M7NK6rF@>jVU2QC;Kbe>hd@yGbCbUQbukUB@^Oa`G^PDiS{Iiv@pgB8BNOe{DWZ zA|iaJSA+oK9Vi#}2BbOUgJH$jQrq*I<@aj2t(()s=Ynk|h(GprlVGA#rp)z&Q6s(fJ-pf{V=PXUULC3fI& zUMpI@#)OACD%GFKePFxz82R?Bg962GwtYrZgP)`xcX4-tYNMX{m<5aP@`%trG1pb| z)%{kf)0H@Tm27FFhGXM{*yvYn%XTV1-d23nx==p@Qy)xgEVi9PS^7TY&huD1A>U_> ztH)ITuo|s+NKiQ*0JL6Ue!h@@#}!dvfa5V|-bTe?NP|nXxtF@Pj&M7Eq=_i-KZ~*d zidRy0188~e^?|#eI})^bJ9zWnreCmg}JzXQpDN~qdxZl81>Hl20*Y^01$eG z>O`LEcOnu(M)i2H>JfzqQ`c~S=jMQ2St^klZ3^e4^y;^y*YWkMXhD(TjFE%;OuZAu9puxbj+^|YXwJBmu=M2Cf6A?iN=`^(VlVky~ck$>mMskT_ZF! zo(~KZa%>YKoD`85W`>l93Gqm#?pFIrv+_WBcO7J_XNW80xwVzpSy$R#pM9kYG~AvX zDr;c5H68lxtC1sO=e*?#XSo$tz>8pnYw(Ce^Sop$TbI+}q7pBO^>ih6dU`>^CyNYL zWWvbD;b{SPFdn?!L2ge&rhPrLt1(py56%`EX-1D^yaD7_>sI!&bCXtq1OVx!4gVKJF)C zEK!yx?o2nJ@joCD7)Fx990iuY>9?ak6z~014`&ETwR^mJ(w+BV zmFRJ)+c%cp-@shY36@!h0T;adP=*4duG{M^ZUEb} z(37`~o?x|FM8VowEhf88TrTtwNyaV1$ns{}^FB5pnbJWM3abv0y((AU&OkndNlw36 zW{su=zV-Tg4mAoxiY^D(?=LTqY*8+zRy*oy_{|ks?ZoS8pGUnolfN`G@Tq(hu@EX& zXV^huvZ0ynFJv_v=1^PYr&`I&$b#1aCek@Q9l8?LT=l^1&q{E|BzA-}COAE-b#R-$ zd-dApQ#n`l8yiBbY3~fcT`Cev;P3*s8yVhx2jy4-0CgS6)JfPPw37n8Wxv&bvAEie zNHF%xuEQiB>3M`YbqrpLS4yVpK=pVoN+L}~rKO?sMme)LG3+3Et;R^V%&_qVpJ!Bt($phOj=e zA4}Kh@OLJ?y4(}y=lR>>kA4zKJ^(44lQ6f`7+ampuaB4BO1Z!@U>0&WH(t1c`JNJ; zdKY20;0OCLaN;I|lKoOESuHOG-3SneE)Uogt0LBH)Eck!#TPeR!Q*ecQZy&afuf8M(4F?D5vPpy z(fN&Kk%zCaw1_JjHqA!t#R%M5^;EUG<71NGL?#9=h`&w_IX(fzq9v|VmqSPwZ&xrRK~P`$ z?6DmF5|=VZ)bhBD3|h95!?R8xI^bOpq9bet#_=7 zjIb!B-+@DwzGMF}&stnx6ciss=i9se(EuGXmNU0pCV@3ZlFDIq@+rH+7g$ugkVxB;fQ~vr zr+s`nsa5JyjVJd$k@_DbuZEb*xD7 z<-C!r8lW`O9Iqpsf|nd$%P=t^#rlC**utuXI_Iv;Yk#I)0t^L3@9HSuJMh8CB?{ghG17&4;oh}hWxo4i>4a>; z01YwF6}Pk}spPB~hvVFpr>2PrZP!HgodxCx$g?%_Egg*3_e%*B6DRcTGVZ*&v};Mm z-(?tS)!q)hV1P;%;@&&JWT6ioY|OpgKsWI^bo@%HR`zk{(t&VXvC_!Twz)?A&&3ke zqOz@D_uy6d&>o9Og+#WZLYAXmLgd=r5=W5R_ge`d7S2>Z?es)9_??hF(?H~;M?O7q zymh$do$noWit>vX2GTgNvf^w^#9jym<*4WdLo#uCJ7Pc7iZl7rcVu$O>tj9@bH`i~ zGtC)6zPW>#-ORzW>*X(a-^&DB(I9gl@#gly^Oyyto^V9!w*fqS`R*B$(HDO z>ar_jHBLTXG?U|`1+wz&CS79#h3p=b-*wCH9x-rsW2S@Sg$xWWu+&|M+OmP#M@mWa zxgP4J?|iAsLsmmf-k_u7V%F&z;<3=&&MH|9&ZT|R3%a+{ zXy@qRp~HaLtVT?S?CN0LQ{7LDC^YiYLz|mrBuE@si0jfm?>M&&kZuG_cQ9}8li>v# z4UmW3*LQhAXjhGWP2=_o%>Gn&9tBq=;D*OJfWesB2R8sz#199ETopBPG!L1!^Za%+ zXKUPM3oH>xVOR$;%-o&-)I|P*4cLJ!cATq{r_J(+W9yfBx&^TDRCC}w*=|BUTv@7a zAviL0m6-H1h{s1Hw!ftEeo@QzO6=Vodk<&IDi6#3@r34%iv7KiLU!qLBMxD7PslNC zET!Wtf(=?QFGM#r#_LjjFaCC`0EisY?4tef3alOCNKjzr;oCEdBAAPGkSRXI7Y}BY zMPrzoZ;D-WMb*(ouyvWx;@yQjuy8Tnue)+>ybt6Ye5 zxuTxw6ac>qwWo5xu5%79t`|`A81+Uw#L8-HjtKdm&Oi1%(n#O1`1l5$zz9$EB{2yJ zO^xmMZ{FmvXUq_tH_o=*yC-Gxpf03<>)G(OJhCXu!ty{!cu)(nAQEk9d)UhRMc{CN zHbzZZ=yd~QBZb|3?T`}Gn-s>&D(kRp*OZ34xfdbw9@ll$cm)qHN^>Dpd%H2V9zwtV zcHGWwU^cmgNy-P`N{T|cLoqC(ERDj8 z5FZZxRgH+um7Gdo;|w$+FmXdLp{X{7k8f|e4D0QDT@JHREdcd=45un_1%Sv@y~csR zt2=Oij)_Cp9l!M%q6 zdkeE`tm4+mbx5D71Ur6P4QE>4;Ok=c=mQDg>C>rmj#y!jLg{6|b=OtR#k^Iv@0lOau9KY0SAFcWuCp5tqeRZgGg_7S+VQP9fhcQM%q2f^3`t$O z@1J}Nw?Gw4tq&29F#Hv2olRDQ=(UfrQBCyq`{YWx50x_~G^f{DjTsYG?~p16A6*G- zUq`~j`u$e)49D?l(ra99w^(54Alq4_&ui`TGSmb8hmi)UpAzLLkn@OK4lXAJ?BMSz zw81J>{G>f!g)wq3IHA}Zpl|aRY!B6GVr_}kuR%+I(jQ);R;L?uvcBt_N5qWk3UdA5 z`za~V?~XSFNE_g9O;X+f{JpK7eYX#4^4k+GA|YG#wq? z0kfsAZ9DDnu=Mr?99*rRKd_6Oe=fQ9x`Bsjd6Q4zm=74#Gzb=1z9{yk8rJvUgDdH3rX~{>M>xI^PSa!7HY=u|tH25e3F+{}gpP<# z5)K7=n;FXLQclu0kMz%Nd-)14uLOqGPBenI_Vg!&D=4jq3x~QL-3WLyIM|yNjCajJ z7OZ*x@yo~2&T>lzq-nAj$VYdnF+-0Ox?6Ik5Dr3LK=6xX<&+bJ|pW1pbM_WRV{@TATF)kKG7*z znPBsI8F=6L^exK=WYU8VPO4dAU6?Y@iWILB9z3B%$@D32qq++{Ab=@6v~pX1A|cUj zNgyz{>Fr(~hiL7nv!f?!9_Sv(^R@JRP~p{nW&h`s!q9I9ZGBfd**4|8D+(*27Y>(9 z#0D>$9$AR}{I#lTi=#&q5z4Di$;Wft-hPfTNHy^g3+I>xI@spsP=TO*`oyHm8qr4` z4z(|e696(Rw6vfQK8_QF0)7?CeTo;APWZH)F)7|2);IPGI zY}7TYNaIQFzVDxlS$ zH~zDtix%%cX#J{4Y61CAsQvne5ICs*aQ_=XEpYzg``HjSQmDCAS%hfU;FLS|@CI;+ z^Q)rVzbpEA?|kt_`=66XZ&UVVyiK{_YzXIfEa9#JE7{i@z{$^Opd&oC6ME)b)$%86 zncs~#KDciE-KXCaiEV-W>Qlls(@Y(7X~H*l`zP224!7Y_x8Z+*eao=gTe$vBpno>` zC)U^Re#ZL!b@lJq1vpL*@1KAz{#U>>Zz&+M#N`9+5+VMDNb5fl z$sYZUCh(tVUTqWtBTmczdscr+ibvG`%IX9zB63@D{_kG6{;L-aH-MayD?hN`SIeuv zul}nUgu4o-EV1PqgMK+9m!ZGm&i$L3EHll1!xNsjXv2OH>^D7|Ew7H+{r;jS^uUWB zfxH1+h5XGT1Mh#=eIYgUTNxt%rsr*C3dh`8+4oodjQ-Qje@oI_1epC#-TbFAja!zT z{$kl}X!d^#6^8ueHvh#{^#63Sj>y(8>f@%)2^s%t7HZ@{Tj*c!mS2z!-D-X4_U6&c z(8%jQEc^``<}cv@*ESHoFu6Ud-yKQ)x6%B{OXMdY|CQd?U4PpM`~TR>-#+q-oxhU) zgY_*t3vU3cKP?PFd3*BEKdj)dlPj+E{l5PA|55tTzdS_7k9gMrO!V6}^Z(ZJpK4_O zaPya1|8wady@{^<>d^N2FE##KP79tt6$ASziJzYOi(IV#Bp0qmwSZqv$?@U&zt8@6 zLB}@$ga1)8guD9LKmMxeU%vP&w(u6_pRux5oW$q4FHP9gM$ZhMD}^aF4Dr|2WfRDcj$! z_7Bbp{84E0KWEo3r{7$@`iD8W{>Pj!Q-0Iqc1+0q1oG3r9JAKi!{HAU|CP=DJ*REA z3PpRk#P)Eq@AeM(xKDd$E8%UA$FBC|$b>=~amNLU1M zTlMoLZ(}g4NW)1Ur2LkdtsYzIh_RLO{F>s~T9$jygd3v?MhLLVj}LNz+eTe zc%6s8x)r4;iTvH_CL3F`Yfrc`$R&IE@LCT&kRCiD>82vik~iHJo1NSSzTJlY&!1kSR*x6T3Smo z1heB438k!pdw`xT*DZv7XnVjH=5N)snP0dW^2&K*V04{&ytL#1jP9sA#bs;VzrK<| z?AJF~TFAubU`Jz_ScrqfNXZ^_4~Iwwad6T6Klq|2@7jhvvMMkk+tuSkDEzL+op(@T zC=-1ofb3hR%pWN$Lcvnc%sTOb1y;FP=neF!4&Qk zvmQ%wVawAwYGEum?1oVXTV_nkq~}&F%@<~ z;3-P)dDIVAGd}Fz&J97%jFtQlewa*_F|C(XYroA~qWjFOiiQI0D5;xdkI0NF`Kj0v zay&bk#`6lCa=qNFd` z<_T7x+pMCT3MRx4-`wNGqsbT3(}D!xx*V5z`>LN2FY|ajT`SeDCNqy)Lrb_?Q*~1- zr`W>$sDs|JC6of9eS?wCXiOl!qt#yFm3Z*9KD6X-?-j++%IRC2^sJ;495!(i_qhGW5 zThD4DZqBqi&+ZeeoT{>zA4aZ8a-n=_^@*FKCQ*G26(o%V<|O-9`7a(uJkky#e`5lK9mWvg7yoOZ`rrYqlf3zUh=L zQC0~_)lVAf^N!pp`EwJV5CuiLSre)DU|XYNpvSp7Nu#Kor1|IVBt8t-Y2|8t=6*zo z0JAo9wjJ=aSmu7N=&{1lv{d_OydDbeB0Iul_nFUr z%h^NrSlT^@N4-XJSvuja|n0 zgFy~1ZasDmPyt;mro++agCoahi*H$3`?IcMgegi0WC41EfhY}l!gsBhhhCV6?=5WR zh(XDrhi+CQP12RhjbE69CyntG3>1HS^~o7twJ`Cgex_g0bymwc1x&?A`^@4z`F0Wr z)qvzAWRuJH(zKxZw`gS#zazO+x@h2p$l$8S)jxsy-tYGCbxvO^YaUcSo(nEO(e6y; z0FRNVksc@tpi^STjh7@-(tiKnWA6X)7hcg?h>70-h;H8^i25P+3QJGKOlN)Baxx|t zr`|MyFnZmvW$ZHc%M@#o)8F;ZivC+-@2=*}{ zREF#J@Da%%S}@sz68H^35D{#j$a0jm<((6|dpR32&?>)UEW=$mU(oPs%8vq>ukC3pCfH06P05XITq?4J21E^7eo0D6BWbpq0gCGZk zD1#g`qaXv5AS1INa% zU=va_WOo!65e-Z%Y*e0j5U5s$k%5r~#T-_kVm1aAb`GGdp&-a4W)@CnRwR=c1X z*@YY@iHIv18aW3}yqH)x**G|)>EZud3_L)?m;{*x8SELJPng>fmCL>CP@tEPspj5u zcjnJ2jW9^m)6R-^m^86gYo2pgAj4%h$>l2;UxwWNy>e06zmJx!?foj%Tvbu!*VZe| z^({2_HJdZ}qeT7o!!9v4m73pHT3IitSk;%E#ciTCVOEOSz0aQi+!mWPFL&CuL)^Ci z8FTU*m)w?B)`@C=?2gTojuO6Y{%!4EVTC6%MZ8i@irmyYIqfi4vCDA=?I1_B12@WV z%VizewsKa%&-2cGpO|x3divh>ydce6aXsbGr#xOYZv9=ix~5E-d`mgVbXn&KOUVf$ zcRU&H9ns2O{_2Lr-VJF_D^L9K_|K3ravMS1p^t`0GiOKPfq@NJ$&gUFv zyJzeEdif_~InTuAe>b0nCheN*y7<5nqc;+-bKRnXcfX3byf8icFHh8`zMA94B3q9h ziS@cPWh%F#ruh!pM|U_^P0K$$!Qezjl@^z0fSgjvMw_}TZSvu1&dZN3SL!Wg=;hIUc-Y(BD(KVf#{9F#K#Se0$8~*V6uDK|9^g=9bR+{;}Qg$BODTTRGbgy9!yWW{C&MhQ8gP-1qI6 zddkH~c_}OYGX#G2Dx3FH?8W05e}dlJo&7v?aM{$W-&oxViN mOHNzM?`;Qjhxz+o0Y3Sb)_v~YTp4P|ehF0wzWloW|4jfMCoxU{ literal 0 HcwPel00001 diff --git a/online/public/system/productpics/2/normal/1899065.jpg b/online/public/system/productpics/2/normal/1899065.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9221e153e463fdcaa622e48d74d073dea4081c51 GIT binary patch literal 21912 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�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 literal 0 HcwPel00001 diff --git a/online/test/fixtures/stages.yml b/online/test/fixtures/stages.yml new file mode 100644 index 0000000..d091df3 --- /dev/null +++ b/online/test/fixtures/stages.yml @@ -0,0 +1,23 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html + +one: + question_date: 2010-03-19 + question: MyText + feed_useraction: MyText + feed_selfaction: MyText + feedtext1: MyText + feedtext2: MyText + feedpic_file_name: MyString + feedpic_content_type: MyString + feedpic_file_size: 1 + +two: + question_date: 2010-03-19 + question: MyText + feed_useraction: MyText + feed_selfaction: MyText + feedtext1: MyText + feedtext2: MyText + feedpic_file_name: MyString + feedpic_content_type: MyString + feedpic_file_size: 1 diff --git a/online/test/fixtures/statics.yml b/online/test/fixtures/statics.yml new file mode 100644 index 0000000..e14771b --- /dev/null +++ b/online/test/fixtures/statics.yml @@ -0,0 +1,23 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html + +one: + product_tab_name: MyString + product_description: MyText + productdescription: MyText + productpic_file_name: MyString + productpic_content_type: MyString + productpic_file_size: 1 + bannerpic_file_name: MyString + bannerpic_content_type: MyString + bannerpic_file_size: 1 + +two: + product_tab_name: MyString + product_description: MyText + productdescription: MyText + productpic_file_name: MyString + productpic_content_type: MyString + productpic_file_size: 1 + bannerpic_file_name: MyString + bannerpic_content_type: MyString + bannerpic_file_size: 1 diff --git a/online/test/functional/stages_controller_test.rb b/online/test/functional/stages_controller_test.rb new file mode 100644 index 0000000..60da326 --- /dev/null +++ b/online/test/functional/stages_controller_test.rb @@ -0,0 +1,45 @@ +require 'test_helper' + +class StagesControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:stages) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create stage" do + assert_difference('Stage.count') do + post :create, :stage => { } + end + + assert_redirected_to stage_path(assigns(:stage)) + end + + test "should show stage" do + get :show, :id => stages(:one).id + assert_response :success + end + + test "should get edit" do + get :edit, :id => stages(:one).id + assert_response :success + end + + test "should update stage" do + put :update, :id => stages(:one).id, :stage => { } + assert_redirected_to stage_path(assigns(:stage)) + end + + test "should destroy stage" do + assert_difference('Stage.count', -1) do + delete :destroy, :id => stages(:one).id + end + + assert_redirected_to stages_path + end +end diff --git a/online/test/functional/statics_controller_test.rb b/online/test/functional/statics_controller_test.rb new file mode 100644 index 0000000..b7826a7 --- /dev/null +++ b/online/test/functional/statics_controller_test.rb @@ -0,0 +1,45 @@ +require 'test_helper' + +class StaticsControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:statics) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create static" do + assert_difference('Static.count') do + post :create, :static => { } + end + + assert_redirected_to static_path(assigns(:static)) + end + + test "should show static" do + get :show, :id => statics(:one).id + assert_response :success + end + + test "should get edit" do + get :edit, :id => statics(:one).id + assert_response :success + end + + test "should update static" do + put :update, :id => statics(:one).id, :static => { } + assert_redirected_to static_path(assigns(:static)) + end + + test "should destroy static" do + assert_difference('Static.count', -1) do + delete :destroy, :id => statics(:one).id + end + + assert_redirected_to statics_path + end +end diff --git a/online/test/unit/stage_test.rb b/online/test/unit/stage_test.rb new file mode 100644 index 0000000..7ac2593 --- /dev/null +++ b/online/test/unit/stage_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class StageTest < ActiveSupport::TestCase + # Replace this with your real tests. + test "the truth" do + assert true + end +end diff --git a/online/test/unit/static_test.rb b/online/test/unit/static_test.rb new file mode 100644 index 0000000..034246f --- /dev/null +++ b/online/test/unit/static_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class StaticTest < ActiveSupport::TestCase + # Replace this with your real tests. + test "the truth" do + assert true + end +end diff --git a/online/vendor/plugins/imagemagick_tag/README b/online/vendor/plugins/imagemagick_tag/README new file mode 100644 index 0000000..9709515 --- /dev/null +++ b/online/vendor/plugins/imagemagick_tag/README @@ -0,0 +1,26 @@ +ImageMagick-Tag +=============== +Gijs van Tulder +http://vantulder.net/rails/magick/ + +This plugin provides an easy way to use ImageMagick commands to process +images from a Rails template. + +The basic idea is this: you have a directory with images, and want to +process them with ImageMagick (because you want to resize them, or crop +them, or rotate them etc.). Suppose that you have an image gallery, with a +controller Photo to display the images. The image files are stored in the +directory '/var/lib/photos'. Now, if you want to generate and display +thumbnails, you'd do this: + +# in the controller +class Photo < ApplicationController + imagemagick_for '/var/lib/photos' +end + +# in the view +<%= imagemagick_tag 'first_photo.jpg', 'resize(100x100)' %> + +Request the view, and ta-da: the image first_photo.jpg is displayed, and it +is resized to fit within 100x100 pixels. You can use many other ImageMagick +commands in the same way. diff --git a/online/vendor/plugins/imagemagick_tag/init.rb b/online/vendor/plugins/imagemagick_tag/init.rb new file mode 100644 index 0000000..e26bdf1 --- /dev/null +++ b/online/vendor/plugins/imagemagick_tag/init.rb @@ -0,0 +1,11 @@ +# Include hook code here +require "image_magick" +require "image_magick_macro_helper" + +ActionController::Base.class_eval do + include ActionController::Macros::ImageMagick +end + +ActionView::Base.class_eval do + include ActionView::Helpers::ImageMagickMacroHelper +end diff --git a/online/vendor/plugins/imagemagick_tag/lib/image_magick.rb b/online/vendor/plugins/imagemagick_tag/lib/image_magick.rb new file mode 100644 index 0000000..d399dc5 --- /dev/null +++ b/online/vendor/plugins/imagemagick_tag/lib/image_magick.rb @@ -0,0 +1,1124 @@ +module ActionController + module Macros + module ImageMagick + # + # The default configuration options. + # + DEFAULT_OPTIONS = { :action_name=>:imagemagick, + :cache=>nil, + :prerender=>false, + :max_recipe_level=>:builtin, + :commands_param=>:commands } + + def self.append_features(base) #:nodoc: + super + + base.extend(ClassMethods) + end + + # This macro can be used to add ImageMagick functionality to a controller. + # You can use it to access ImageMagick commands with a simple template tag. + # ImageMagick is a set of image processing tools, that can do nearly everything + # you'd ever want to do with an image. Resize, rotate, crop and much more. + # + # This needs the RMagick library (and ImageMagick, of course) to work. + # + # * http://www.imagemagick.org/ + # * http://rmagick.rubyforge.org/ + # + # + # == As an action, with images from a directory + # + # The simplest way to use this extension, is by adding the behaviour to a directory. + # For example: + # + # # Controller + # class Photo < ApplicationController + # imagemagick_for_directory '/var/lib/photos' + # end + # + # # View + # <%= imagemagick_tag 'presentation.jpg', 'resize(100x50)+flop' %> + # + # This example generates an tag in the view, which points to + # the +imagemagick+ action of the Photo controller. All you need to do to + # generate this controller, is adding the imagemagick_for_directory method to your + # controller class. The +imagemagick+ action opens the image, sends the + # commands to RMagick for processing and then sends the result to the browser. + # + # This example shows you the image presentation.jpg from the /var/lib/photos + # directory. It is processed with the commands resize(100x50), which means + # that ImageMagick will shrink it to fit it in an area of 100x50 pixels, and + # flop, which means that left and right are reversed. + # + # + # == As an +after_filter+, with images provided by your action + # + # Or perhaps you have stored your images not in a directory, but in a database or + # somewhere else. Even then you can use the ImageMagick extension. This works by + # adding the ImageMagick processing as an +after_filter+ for the action that + # retrieves and sends the original image. For example: + # + # # Controller + # class Photo < ApplicationController + # imagemagick_filter_for :display_photo + # + # def display_photo + # # do some work to retrieve and send the photo (that's your job) + # end + # end + # + # # View + # <%= imagemagick_tag :action=>'display_photo', :commands=>'resize(100)', ... other parameters for display_photo ... %> + # + # The action +display_photo+ gets the image from the database or where you've stored + # it and renders it normally. Then after that, the imagemagick filter is executed. It + # reads the output from your action, processes it using the commands from @params['commands'] + # and finally sends the resulting image to the browser (or to another filter, if there is one). + # + # The tag for this rendered image is generated by +imagemagick_tag+: + # you give it the +url_for+ options hash that your action needs to find and display the image, + # plus the additional :commands parameter that is to be used by ImageMagick. + # + # + # == The image source + # + # === Action: the image directory + # + # If you used +imagemagick_for_directory+, the extension expects to find all images in a directory, + # the name of which is specified with the +imagemagick_for_directory+ method. In this directory, + # you can simply place the image files. The names and extensions are not really important, + # ImageMagick is smart enough to determine the file type from the contents of the file. + # + # In the image directory, you can have subdirectories. Just give the name of the + # subdirectory to imagemagick_tag. For example, if in our directory /var/lib/photos + # there is a subdirectory called rails, we can refer to an image in that subdirectory + # like this: + # + # # View + # <%= imagemagick_tag 'rails/presentation.jpg' %> + # + # You can use the ImageMagick extension in multiple controllers, but you might + # want to specify a different image directory for each of them. (But even that is not + # required.) + # + # === Filter: the @response.body + # + # The filter expects your action to put the image in @response.body. If you use + # render(:file) or render(:text) to render the image, it should work right. You + # can't use the streaming methods +send_file+ and +send_data+. + # + # + # == Caching + # + # If you don't take any precautions, the rendered image will not be saved, and + # it has to be rendered from scratch for every new request. This can make it a + # little slow. This extension therefore provides a caching mechanism, which caches + # the processed images. For the requests that follow after the first rendering, + # it simply sends the cached image, instead of re-rendering it. + # + # To enable caching, you need a cache directory that is writable by the webserver. + # If you have that directory, all you have to do is specify it with the +cache+ option + # of the +imagemagick_for+ method. + # + # # Controller + # class Photo < ApplicationController + # imagemagick_for_directory '/var/lib/photos', :cache=>'/var/lib/photo-cache' + # end + # + # You can use the same cache directory for multiple controllers. Caching is also + # possible if you use +imagemagick_filter_for+. + # + # + # == Pre-rendering + # + # By default, the commands are transferred in the URL of the image, and are executed + # when the user requests the image. This is reasonably safe, but it does allow your + # visitors to specify any ImageMagick command they want by simply changing the URL. + # If you think this is a problem, you can enable the pre-rendering function. + # + # Pre-rendering means that the image is rendered earlier in the process: when the + # +imagemagick_tag+ is displayed by the view. The image is rendered and cached, and the + # name of that cached image is sent to the browser, which then uses it to request the + # image. This means that the user does not have the possibility to influence the + # rendering of the image, as rendering is done from the view. It also means that the + # initial delay of the rendering of the image is on the web page, instead of on the + # loading of the images. + # + # The pre-rendered images are stored by the caching system, so you'll need to + # enable caching if you want to use pre-rendering. + # + # # Controller + # class Photo < ApplicationController + # imagemagick_for_directory '/var/lib/photos', :cache=>'/var/lib/photo-cache', :prerender=>true + # end + # + # Prerendering is only possible if you're using the +imagemagick_for_directory+ action, + # prerendering does not work with imagemagick_filter_for. + # + # + # == Recipes + # + # It is possible to define your own commands, or 'recipes', for use with imagemagick_tag. + # See the documentation for ActionController::Macros::ImageMagick::RecipeSet for more + # information. + # + # If you have your own set of recipes, you can restrict the commands that can be executed + # to the recipes in this set. See the :max_recipe_level option of imagemagick_for. + # + # + # == Routes.rb trick + # + # +imagemagick_for+ works without any additional routes. It uses urls like: + # /photo/imagemagick/presentation.jpg?command=resize(100x100) + # + # If you'd like to get rid of the ?command=, you can add the following routes to + # your routes.rb: + # map.connect ':controller/imagemagick/:id', :action=>'imagemagick', :commands=>'' + # map.connect ':controller/imagemagick/:commands/:id', :action=>'imagemagick' + # + # The above url will now be rendered as: + # /photo/imagemagick/resize(100x100)/presentation.jpg + # + module ClassMethods + # + # Enables the ImageMagick extension for the given +image_path+. For a description + # of the +options+, see the documentation for +imagemagick_for+. + # + def imagemagick_for_directory(image_path, options = {}) + # call imagemagick_for with a String + imagemagick_for(image_path.to_s, options) + end + + # + # Enables the ImageMagick extension as an +after_filter+ for +action_name+. + # The response of the action will be processed as an image, with the commands found + # in @params["command"]. + # + # For a description of the +options+, see the documentation for +imagemagick_for+. + # + def imagemagick_filter_for(action_name, options = {}) + # call imagemagick_for with a Symbol + imagemagick_for(action_name.to_sym, options) + end + + # + # Enables the ImageMagick extension for this controller. If +image_source+ is a +String+, + # the extension will be enabled for the directory with that name. If +image_source+ is a + # +Symbol+, the extension will be enabled as a +after_filter+ that does its work on the + # result of the action with that name. + # + # This method is also available as +imagemagick_for_directory+ and +imagemagick_filter_for+. + # + # The following +options+ can be specified: + # + # * :cache: the directory where cached images are stored, or +nil+ (the default) + # if you don't want caching. The directory has to be writable by the web server. + # * :prerender: set this to +true+ if you want pre-rendering. This only works if + # you have enabled caching. By default, pre-rendering is off. + # * :action_name: the name of the imagemagick action. The default is +imagemagick+, + # you can change it by specifying this option. + # * :commands_param: the name of the commands parameter in the @params hash, + # :commands by default. + # * :max_recipe_level: whether or not you can use only local or global recipes + # (see the documentation for +RecipeSet+ for more about these levels). This can have one + # of those values: + # * :local: only local recipes can be used + # * :global: only local and global recipes can be used + # * :builtin (the default): local, global and the built-in recipes can be used + # + # To change the system-wide defaults, see the ActionController::Macros::ImageMagick::DEFAULT_OPTIONS + # + def imagemagick_for(image_source, options = {}) + require 'RMagick' + + configuration = Hash.new.merge!(ActionController::Macros::ImageMagick::DEFAULT_OPTIONS) + configuration.update(options) + + # expand the path if it is relative + if defined?(RAILS_ROOT) + configuration[:cache] = File.expand_path(configuration[:cache], RAILS_ROOT) unless configuration[:cache].nil? + end + + # set the maximum recipe level that is allowed + configuration[:max_recipe_level] = configuration[:max_recipe_level].to_sym + configuration[:max_recipe_level] = :builtin unless [:builtin, :global, :local].member?(configuration[:max_recipe_level]) + + # initialize the list of recipes specific to this controller. + configuration[:local_recipes] = RecipeSet.new + + # what is the source of the images? + if image_source.is_a?(String) + # images from a directory + # strip the trailing slash + configuration[:image_path] = image_source + configuration[:image_path] = image_source.sub(/\/$/, '') if image_source =~ /\/$/ + configuration[:type] = :action + + # expand + if defined?(RAILS_ROOT) + configuration[:image_path] = File.expand_path(configuration[:image_path], RAILS_ROOT) + end + + # the name of the action can be specified, but it has to be a Symbol + configuration[:action_name] = :imagemagick unless configuration.has_key?(:action_name) + configuration[:action_name] = configuration[:action_name].to_sym + else + # images from the response of an action + configuration[:type] = :filter + configuration[:for_action] = image_source.to_sym + end + + # + # Every controller-class gets a imagemagick_macro_helper-variable, + # which contains the configuration options. + # + @imagemagick_macro_helper = ImageMagickMacroHelper.new(configuration) + + # + # Makes the class helper available from the controller instance. + # + define_method(:imagemagick_macro_helper) do + return self.class.instance_variable_get(:@imagemagick_macro_helper) + end + protected :imagemagick_macro_helper + + # + # Returns the +RecipeSet+ with recipes local to this controller. + # + define_method(:imagemagick_local_recipes) do + return imagemagick_macro_helper.local_recipes + end + protected :imagemagick_local_recipes + + # + # Shortcut to the +url_for_imagemagick+ method of the helper. + # Gives the url to the +imagemagick+ action for this filename, with these commands. + # + define_method(:url_for_imagemagick) do |filename_or_params, p_commands| + imagemagick_macro_helper.controller = self + url_for(imagemagick_macro_helper.url_options_for_imagemagick(filename_or_params, p_commands)) + end + + # + # Implement the extension. + # + if configuration[:type]==:action + implement_as_action(configuration) + elsif configuration[:type]==:filter + implement_as_filter(configuration) + end + end + + # + # Adds a custom recipe with the given +name+. +recipe+ can be a +String+, + # a +Proc+, a +Class+ or a +Symbol+. + # + def imagemagick_recipe(name, recipe, version = nil) + if @imagemagick_macro_helper.nil? + raise(ActionControllerError, "Use imagemagick_for before you use imagemagick_recipe.") + end + + @imagemagick_macro_helper.add_recipe(name, recipe, version) + end + + private + # + # Implements the extension as an action. + # + def implement_as_action(configuration) + # + # The +imagemagick+ action of the controller. + # Reads the filename and the commands from the request and sends an image. + # + define_method(configuration[:action_name]) do + begin + imagemagick_macro_helper.controller = self + + identification = @params["id"].to_s + commands = @params["#{configuration[:commands_param]}"] + + if imagemagick_macro_helper.prerender? && !imagemagick_macro_helper.cached?(identification, commands) + # prerendering is required, but there is no cached image + render :text=>"Image not found.", :status=>404 + end + + result = imagemagick_macro_helper.render(identification, identification, commands) + + if result.nil? + render :text=>"Image not found.", :status=>404 + else + @response.headers["Content-type"] = result.mime_type + render :text=>result.to_blob + end + rescue Exception=>e + render :text=>"Image could not be processed. "+e.to_s, :status=>500 + end + end + end + + # + # Implements the extension using +after_filter+. + # + def implement_as_filter(configuration) + # + # The +imagemagick+ filter method of the controller. + # Reads the response result and the commands from the request and sends an image. + # + define_method(:imagemagick_after_filter) do + image = Magick::Image.from_blob(@response.body) + + # if the result is not an image, we don't have to process it + if !image.empty? + imagemagick_macro_helper.controller = self + + identification = MD5.md5(@response.body).to_s + commands = @params["#{configuration[:commands_param]}"] + + result = imagemagick_macro_helper.render(image.first, identification, commands) + + begin + if result.nil? + @response.headers["Status"] = 404 + @response.body = "Image not found." + else + @response.headers["Content-type"] = result.mime_type + @response.body = result.to_blob + end + rescue Exception=>e + @response.headers["Status"] = 500 + @response.body = "Image could not be processed. "+e.to_s + end + end + end + + module_eval do + after_filter :imagemagick_after_filter, :only=>"#{configuration[:for_action]}" + end + end + end + + # + # The class that contains all methods of the ImageMagick extension. + # Every controller with imagemagick_for gets an instance of this, filled + # with its own configuration options. + # + class ImageMagickMacroHelper #:nodoc: all + def initialize(configuration) + @configuration = configuration + end + + def caching? + return !@configuration[:cache].nil? + end + + def prerender? + # only if caching is available and the +:action+ method is used + return @configuration[:type]==:action && caching? && @configuration[:prerender] + end + + def controller=(controller) + @configuration[:controller] = controller + end + + def add_recipe(name, action, version = nil) + @configuration[:local_recipes].add(name, action, version) + end + + def local_recipes + @configuration[:local_recipes] + end + + # check the filename: it may contain directory names, but it cannot + # go to a higher directory than configuration[:image_path] + def valid_filename?(filename) + pathname = expand_filename(filename) + if pathname =~ /^#{@configuration[:image_path]}\// + return File.readable?(pathname) + else + return false + end + end + + # + # Expands the filename with the +image_path+. + # + def expand_filename(filename) + return File.expand_path(filename, @configuration[:image_path] + "/") + end + + # + # Returns the filename the cached image will have if it is renderd + # with the given commands. + # + def cache_filename(identification, commands) + commands = MagickCommandList.from_anything(commands) + return File.expand_path(@configuration[:controller].class.to_s.gsub(/[^A-Za-z0-9]/, '') + "." + + commands.to_cache_s(@configuration) + identification.gsub(/\//, '.'), @configuration[:cache]+"/") + end + + # + # Returns true if this image with these commands is cached. + # + def cached?(identification, commands) + clear_cache_if_stale(identification, commands) + return caching? && File.exists?(cache_filename(identification, commands)) + end + + # + # Removes the cached image for this file+commands if the original image + # is newer than the file in the cache. + # + def clear_cache_if_stale(filename, commands) + if caching? && @configuration[:type]==:action + source_path = expand_filename(filename) + cache_path = cache_filename(filename, commands) + if File.exists?(cache_path) && File.mtime(cache_path) < File.mtime(source_path) + # remove the cached file, the original file is newer + FileUtils.rm(source_path) + end + end + end + + # + # Returns a Hash of url_for options that render the given filename + # with the given ImageMagick commands. + # + def url_options_for_imagemagick(filename_or_params, p_commands) + if p_commands.nil? && filename_or_params.is_a?(Hash) + p_commands = filename_or_params.delete(@configuration[:commands_param]) + elsif p_commands.nil? + p_commands = [] + end + commands = MagickCommandList.from_anything(p_commands) + + path_options = nil + + if @configuration[:type]==:action + path_options = { :action=>@configuration[:action_name].to_s } + path_options[:id] = filename_or_params + path_options[@configuration[:commands_param]] = commands.to_s unless commands.commands.empty? + + render(filename_or_params, filename_or_params, commands) if prerender? + + elsif @configuration[:type]==:filter + path_options = { } + path_options.merge!(filename_or_params) + path_options[@configuration[:commands_param]] = commands.to_s unless commands.commands.empty? + end + + return path_options + end + + # + # Renders the +image+ with the given +commands+. + # +image+ can be the name of a file, which will be read, or a Magick::Image-object. + # +identification+ is the unique identifier string for this image, for use in the cache. + # + def render(image, identification, commands) + commands = ImageMagickMacroHelper::MagickCommandList.from_anything(commands) + + clear_cache_if_stale(identification, commands) + + if cached?(identification, commands) + # return the file + return Magick::Image.read(cache_filename(identification, commands)).first + + else + # not cached, we have to render the image + + # is it a string (filename) or already an image? + if image.is_a?(String) + if valid_filename?(image) + image = Magick::Image.read(expand_filename(image)).first + else + return nil + end + end + + # process the image + image = commands.execute_on(image, @configuration) + image.strip! + + # save in the cache? + if caching? + image.write(cache_filename(identification, commands)) + end + + return image + end + + return nil + end + + # + # Contains a list of ImageMagick commands (of the type MagickCommand). + # + class MagickCommandList + attr_reader :commands + + def initialize + @commands = Array.new + end + + # + # Returns a String of the commands for use in a url. + # (The commands are chained with a +.) + # => resize(100x1)+chop + # + def to_s + command_string = @commands.empty? ? "" : @commands.join("+") + end + + # + # Returns a String of the commands for use in the cache-filename. + # (All strange characters are removed.) + # => resize.100x1.chop. + # + def to_cache_s(configuration) + if !commands.empty? + command_string = to_s + "." + command_string += recipe_versions(configuration) + command_string.gsub!(/[+,]/, '.') + command_string.gsub!(/[^a-zA-Z0-9.]/, '') + else + command_string = "" + end + return command_string + end + + def recipe_versions(configuration) + versions = "" + @commands.each { |cmd| versions += cmd.recipe_version(configuration).to_s } + versions += "." unless versions.empty? + return versions + end + + # + # Executes the commands on this list on the picture. + # picture should be an Magick::Image-object. + # + def execute_on(picture, configuration) + @commands.each { |cmd| picture = cmd.execute_on(picture, configuration) } + return picture + end + + # + # Parses a String of commands and returns the MagickCommandList. + # String is of the type generated by MagickCommandList::to_s + # resize(100x1)+chop + # + def self.from_s(command_string, entered_by_user = true) + list = MagickCommandList.new + (command_string+"+").scan(/(([^(+]+)(\([^)]+\))?)*/) do |match| + list.commands << MagickCommand.from_s(match[0], entered_by_user) unless match[0].nil? + end + return list + end + + # + # Returns the MagickCommandList for p_commands. + # p_commands can be: + # + # * a +MagickCommandList+: it will be returned + # * an +Array+: a list of commands. Commands can be Strings and + # arrays: [command, args]: + # [ "resize(1x100)", "resize", ["resize", 100] ] + # * a +String+: will be parsed by MagickCommandList.from_s + # * anything else: an empty MagickCommandList will be returned + # + # +entered_by_user+ indicates whether this command list is prepared + # by the user (+true+), or that it is prepared by a higher-level recipe (+false+). + # If it is set to +true+, the +max_recipe_level+ option will be followed. + # + def self.from_anything(p_commands, entered_by_user = true) + if p_commands.is_a?(MagickCommandList) + commands = p_commands + elsif p_commands.is_a?(Array) + commands = MagickCommandList.new + p_commands.each { |cmd| commands.commands << MagickCommand.new(cmd[0].to_s, cmd[1], entered_by_user) } + elsif p_commands.is_a?(String) + commands = MagickCommandList.from_s(p_commands, entered_by_user) + else + commands = MagickCommandList.new + end + + return commands + end + end + + # + # A command for in a MagickCommandList. + # (A command is a command name, and possibly a data string.) + # + class MagickCommand + attr_accessor :command, :data, :entered_by_user + + def initialize(command, data = nil, entered_by_user = true) + @command = command.to_sym + @data = data + @entered_by_user = entered_by_user + end + + # + # Converts the command to a String version for use in the image url. + # "command" or "command(args)" + # + def to_s + command_string = @command.to_s + command_string += "(" + MagickCommand.encode(data) + ")" unless data.nil? + return command_string + end + + # + # Executes this command on the picture and returns the result. + # + def execute_on(picture, configuration) + if configuration[:local_recipes].has_key?(@command.to_sym) + recipe = configuration[:local_recipes][@command.to_sym].first + elsif (!entered_by_user || [:global,:builtin].member?(configuration[:max_recipe_level])) && + GlobalRecipes.has_key?(@command.to_sym) + recipe = GlobalRecipes[@command.to_sym].first + elsif (!entered_by_user || configuration[:max_recipe_level]==:builtin) && + BuiltinRecipes.has_key?(@command.to_sym) + recipe = BuiltinRecipes[@command.to_sym].first + else + raise "Command " + @command.to_s + " not found." + end + + # recipes may return Strings. continue solving those + # Strings until the result is an image, at which point + # the rendering is finished. + until recipe.is_a?(Magick::Image) + # reorganize: Symbol points to a method on the controller + # Class should have a method execute_recipe_on + if recipe.is_a?(Symbol) + recipe = configuration[:controller].method(recipe) + elsif recipe.respond_to?(:execute_recipe_on) + recipe = recipe.method(:execute_recipe_on) + end + + begin + if recipe.is_a?(Proc) || recipe.is_a?(Method) + recipe = recipe.call(picture, *@data.to_s.split(/,/)) + elsif recipe.is_a?(String) + # a string with other imagemagick commands + recipe = MagickCommandList.from_s(recipe, false).execute_on(picture, configuration) + end + rescue Exception=>e + raise "Error while executing " + @command.to_s + ": " + e.to_s + end + end + + picture = recipe + + return picture + end + + def recipe_version(configuration) + if configuration[:local_recipes].has_key?(@command.to_sym) + recipe = configuration[:local_recipes][@command.to_sym] + elsif (!entered_by_user || [:global,:builtin].member?(configuration[:max_recipe_level])) && + GlobalRecipes.has_key?(@command.to_sym) + recipe = GlobalRecipes[@command.to_sym] + elsif (!entered_by_user || configuration[:max_recipe_level]==:builtin) && + BuiltinRecipes.has_key?(@command.to_sym) + recipe = BuiltinRecipes[@command.to_sym] + else + raise "Command " + @command.to_s + " not found." + end + + version = recipe.last.to_s + + if recipe.first.is_a?(String) + # a string with other imagemagick commands. + # append the version numbers of those too. + version += MagickCommandList.from_s(recipe.first, false).recipe_versions(configuration) + end + + return version + end + + # + # Reads a command string (of the MagickCommand::to_s format) and returns + # a MagickCommand. + # resize(100x10) becomes @command = "resize", @data = "100x10" + # + def self.from_s(command, entered_by_user = true) + return MagickCommand.new(command[/^[^(]+/], command[/\((.+)\)$/, 1], entered_by_user) + end + + # + # Encodes the data string for use in the url command string. + # + def self.encode(data) + # in the command string, ( and ) are used to separate + # the argument from the command: resize(100x10) + return data.to_s.tr("()", "[]") + end + + # + # Decodes the data string from the url command string. + # + def self.decode(data) + return data.to_s.tr("[]", "()") + end + end + end + + + + # == Creating recipes + # + # It is possible to write your own commands to use with +imagemagick_tag+. You do + # this by creating +recipes+. Your own recipes can have arguments and you can mix + # them with normal ImageMagick methods. Such as: + # + # <%= imagemagick_tag 'picture.jpg', 'customthumbnail+resize(100)+myborder(f00)' %> + # + # There are multiple ways to write your own recipes: as a +String+ of normal + # commands, as an inline method (+Proc+), as a method reference (+Symbol+) or as + # an external +Class+. + # + # + # === Recipe type: String + # + # The easiest way is with a String. If you always render your + # profile images with 'resize(100)+border(1,1,fff)', you can shorten + # that with this recipe: + # + # # in the controller + # class UserController < ApplicationController + # imagemagick_for_directory '/var/lib/profiles' + # imagemagick_recipe :userprofile, 'resize(100)+border(1,1,fff)' + # end + # + # # in the view + # <%= imagemagick_tag 'john.jpg', 'userprofile' %> + # + # As you see, you've now created your own 'command'. +userprofile+ will be + # expanded to resize(100)+border(1,1,fff) when rendering. + # + # + # === Recipe type: Proc + # + # A more sophisticated method is by using a Proc. You can use this + # if you want more control than you can get with the String method. And if you + # need custom parameters for your recipes, you simply can't use a String. + # + # With a proc, adding a recipe works like this: + # + # # in the controller + # class UserController < ApplicationController + # imagemagick_for_directory '/var/lib/profiles' + # imagemagick_recipe :square, Proc.new { |image, size| image.resize!(size.to_i, size.to_i) } + # end + # + # # in the view + # <%= imagemagick_tag 'john.jpg', 'square(100)' %> + # + # This example renders the image as a 100x100 pixel square. (If you look closely, you'll + # notice that we're passing the size of 100 pixel as a parameter to the recipe.) + # Proc-recipes work by accepting an +image+ object and perhaps some parameters. In this case, + # the only parameter is +size+. The +image+ object is the real RMagick::Image-object + # of the image that is currently being processed. In your proc, you can execute any of the + # RMagick methods[http://studio.imagemagick.org/RMagick/doc/] you like. + # + # There are two caveats you should keep in mind when using Proc recipes: + # + # * Except for the +image+ object, all arguments passed to the Proc are Strings. + # The incoming parameter string is split by the commas, so 100,100 would give you + # two arguments. In your proc the "100" and "100" are +String+s, but most RMagick commands + # expect +Integer+s or +Float+s. Remember to convert them with +to_i+ or +to_f+ (as in + # the example above). + # + # * Your proc should return the +image+ object. Not every RMagick method is + # available as an in-place method (which is destructive, with a trailing !). Thus, to make + # sure that the changes your recipe makes are saved, you should return the changed image. + # (When a destructive method is available, use that, but returning the image object is still + # required.) + # + # + # === Recipe type: Method or Class + # + # If you don't like providing the recipe as a Proc, you can also give your recipes the form + # of methods of the controller, or as a separate class. + # + # If using a method, give the method name as a Symbol: + # + # class UserController < ApplicationController + # imagemagick_for_directory '/var/lib/profiles' + # imagemagick_recipe :ownresize, :my_own_resize_method + # + # private + # def my_own_resize_method(image, width, height) + # image.resize!(width.to_i, height.to_i) + # end + # end + # + # If using a class, it should have a class method called +execute_recipe_on+. + # Provide the class to imagemagick_recipe: + # + # class MyResizeRecipe + # def self.execute_recipe_on(image, width, height) + # image.resize!(width.to_i, height.to_i) + # end + # end + # + # class UserController < ApplicationController + # imagemagick_for_directory '/var/lib/profiles' + # imagemagick_recipe :ownresize, MyResizeRecipe + # end + # + # As for the arguments and the expected return, the method and class approaches are + # exactly the same as with a proc. + # + # + # == Recipe levels + # + # The ImageMagick extension uses three different levels of recipes. Each level has it + # own +RecipeSet+, which is a Hash-like object that contains the recipes of that level. + # + # At the deepest level, there are the +BuiltinRecipes+. Those recipes implement the + # standard commands that come with ImageMagick. These recipes are available in every + # controller. (You normally shouldn't have to change the recipes at this level.) + # + # At a little higher level, you have the +GlobalRecipes+. This is a list of recipes that + # are specific to the application, i.e. written by you. If you want your recipes to be + # available in every controller, you can add them to the +GlobalRecipes+ RecipeSet. + # + # At the highest level are the local recipes of a controller. These recipes are only + # available in one controller. Recipes defined with +imagemagick_recipe+ are local recipes. + # + # + # === Defining the +GlobalRecipes+ + # + # Creating global recipes works a lot like creating routes. You should do it somewhere + # in your +environment.rb+, or in a file that is included by +environment.rb+. Example: + # + # ActionController::Macros::ImageMagick::GlobalRecipes.add do |recipes| + # recipes.add :customthumbnail, 'resize(100x100)' + # recipes.add :myborder, Proc.new { |image| image.border(1, 1, '#f00") } + # end + # + # You can define your global recipes as a +String+, as a +Proc+ or as a +Class+ (see above). + # Defining them as a +Method+ of the controller is not possible. + # + # + # === Defining local recipes + # + # You can define local recipes in your controller with the +imagemagick_recipe+ method. + # Example: + # + # class < ApplicationController + # imagemagick_for '/var/lib/profiles' + # imagemagick_recipe :customthumbnail, 'resize(100x100)' + # end + # + # You can define your local recipes as a +String+, as a +Proc+, as a +Method+ or as + # a +Class+ (see above). + # + # It's also possible to add local recipes on the fly. For example, if you have stored your + # recipes a database, you write a method to retrieve and add them. To do this, you can + # add the recipe-adding method as a filter for the +imagemagick+ action. For example: + # + # class < ApplicationController + # imagemagick_for '/var/lib/profiles' + # + # # add a filter that is executed before the imagemagick action + # before_filter :add_local_recipes, :only_action=>:imagemagick + # + # private + # def add_local_recipes + # imagemagick_local_recipes.add { |recipes| + # recipes.add :customthumbnail, 'resize(100x100)' + # recipes.add :myborder, Proc.new { |image| image.border(1, 1, '#f00") } + # end + # end + # end + # + # + # == Restricting recipes + # + # It is possible to limit the commands that one can execute on an image. You can restrict + # it to only accept the recipes from the local recipe set, or only from the local and + # global recipe sets. Set this :max_recipe_level as an option for imagemagick_for: + # + # class < ApplicationController + # # if you want only local recipes + # imagemagick_for '/var/lib/profiles', :max_recipe_level=>:local + # + # # if you want only local and global recipes + # imagemagick_for '/var/lib/profiles', :max_recipe_level=>:global + # end + # + # If you don't specify a :max_recipe_level, recipes from all three levels (:local, + # :global and :builtin) may be used. + # + # + # == Recipe versions + # + # (This only applies if you're using the cache.) Combining custom recipes with the image + # cache can lead to problems. In the cache, the images are stored with the names of the + # recipes they were generated with. Now, if you change a recipe but do not change the name, + # the cached images will not be updated. The extension will still serve images that were + # rendered with the old recipe. + # + # The solution to this can be very simple: remember to empty the cache directory whenever + # you change your recipes. This is a perfect way to solve the problem. But there is another + # option, which is a little more sophisticated: add version numbers to your recipes, and + # update the number when you change the recipe. + # + # Recipes can be numbers or strings. The order is not important (version 3 can be older than + # version 1). As long as you're using new version numbers that you haven't used before for the + # same recipe, you'll be fine. + # + # You can add the version number when you define the recipe. For example: + # + # class < ApplicationController + # imagemagick_for '/var/lib/profiles', :cache=>'/my/cache' + # imagemagick_recipe :myborder, Proc.new({ |image| image.border(1, 1, '#f00") }), 'version1' + # end + # + # The rendered images are now cached with the version number, 'version1'. Now if you want + # to change the recipe, just be sure to bump the version number: + # + # class < ApplicationController + # imagemagick_for '/var/lib/profiles', :cache=>'/my/cache' + # imagemagick_recipe :myborder, Proc.new({ |image| image.border(2, 2, '#f00") }), 'version2' + # end + # + # That's about all there is to recipe versions. Just two last notes: + # + # * If you don't define a version number, the default is +nil+. This means that you can + # start setting version numbers starting with the second version of your recipe. (The first + # version has number +nil+, the second gets something like +'version2'+ etc.) + # * If your recipe is a +String+, you don't have to bother adding version numbers. By default, + # the version number is set to the value of the +String+, which means that if you change the + # recipe +String+ the version will be automatically updated too. + # + class RecipeSet < Hash + # + # Adds a custom recipe with the given +name+ and +version+. +recipe+ can be a +String+, + # a +Proc+, a +Class+ or a +Symbol+. If +recipe+ is a +String+ and the +version+ is nil, + # +version+ will be set to the +String+. + # + # If a block is given, the block will be executed with this +self+ + # as the only argument. (This can be used as a way to add many recipes in a row.) + # + def add(name = nil, recipe = nil, version = nil, &block) + if block_given? + yield(self) + else + if recipe.is_a?(String) && version.nil? + version = recipe + end + self[name.to_sym] = [recipe, version] + end + return self + end + + # + # Adds the command +alias_name+ as an alias for the command +original_name+. + # + def add_alias(alias_name, original_name, version = nil) + self[alias_name.to_sym] = [self[original_name.to_sym].first, version] + end + end + + # + # Global recipes, available in every controller. + # + GlobalRecipes = RecipeSet.new + + # + # Recipes for the standard RMagick commands. + # + BuiltinRecipes = RecipeSet.new.add do |recipes| + # standard RMagick commands + recipes.add :blur_image, Proc.new { |image, radius, sigma| image.blur_image(radius.to_f, sigma.to_f) } + recipes.add :border, (Proc.new do |image, width, height, color| + color = "#" + color unless color[0,1]=="#" + image.border!(width.to_i, height.to_i, color) + end ) + recipes.add :colorize, (Proc.new do |image, red_pct, green_pct, blue_pct, fill| + fill = "#" + fill unless fill[0,1]=="#" + image.colorize(red_pct.to_f, green_pct.to_f, blue_pct.to_f, fill) + end ) + recipes.add :crop, Proc.new { |image, x, y, width, height| image.crop!(x.to_i, y.to_i, width.to_i, height.to_i) } + recipes.add :equalize, Proc.new { |image| image.equalize } + recipes.add :flip, Proc.new { |image| image.flip! } + recipes.add :flop, Proc.new { |image| image.flop! } + recipes.add :geometry, Proc.new { |image, data| image.change_geometry!(data) { |cols, rows, img| img.resize!(cols, rows) } } + recipes.add :implode, Proc.new { |image, amount| image.implode(amount.to_f) } + recipes.add :level, Proc.new { |image, black_point, mid_point| image.level(black_point.to_f, mid_point.to_f) } + recipes.add :normalize, Proc.new { |image| image.normalize } + recipes.add :oilpaint, Proc.new { |image, amount| image.oil_paint(amount.to_f) } + recipes.add :opaque, (Proc.new do |image, target, fill| + target = "#" + target unless target[0,1]=="#" + fill = "#" + fill unless fill[0,1]=="#" + image.opaque(target, fill) + end ) + recipes.add :posterize, Proc.new { |image, levels| image.posterize(levels.to_f) } + recipes.add :rotate, Proc.new { |image, amount| image.rotate!(amount.to_i) } + recipes.add :sharpen, Proc.new { |image, radius, sigma| image.sharpen(radius.to_f, sigma.to_f) } + recipes.add :trim, Proc.new { |image| image.trim! } + + # aliases + recipes.add_alias :resize, :geometry + recipes.add_alias :s, :geometry + recipes.add_alias :blur, :blur_image + + + + # This method is not available from imagemagick, but + # it is useful: it will always give you an image of + # exactly the required size. part(100x100) gives you + # a 100x100 pixel crop from the center of the image. + # + # For example: the image is ******** + # ******** + # ******** + # + # And you want this: ** + # ** + # It will then first resize the image: **** + # **** + # And then crops it: *[**]* + # *[**]* + # + # If the source image was this: + # ** -- + # ** it would crop: ** + # ** ** + # ** -- + # + # The command also scales up, if the image is too small + # to cover the whole part. + recipes.add :part, (Proc.new do |image, size| + target_w = size.split(/x/)[0].to_i + target_h = size.split(/x/)[1].to_i + orig_w = image.columns + orig_h = image.rows + + if (orig_w.to_f/orig_h) > (target_w.to_f/target_h) + # scale to correct height + image.change_geometry!("x"+target_h.to_s) { |cols, rows, img| img.resize!(cols, rows) } + + # remove left and right + image.crop!((image.columns - target_w) / 2, 0, target_w, target_h) + + else + # scale to correct width + image.change_geometry!(target_w.to_s+"x") { |cols, rows, img| img.resize!(cols, rows) } + + # remove top and bottom + image.crop!(0, (image.height - target_h) / 2, target_w, target_h) + end + + image + end ) + end + end + end +end diff --git a/online/vendor/plugins/imagemagick_tag/lib/image_magick_macro_helper.rb b/online/vendor/plugins/imagemagick_tag/lib/image_magick_macro_helper.rb new file mode 100644 index 0000000..899e618 --- /dev/null +++ b/online/vendor/plugins/imagemagick_tag/lib/image_magick_macro_helper.rb @@ -0,0 +1,128 @@ +module ActionView + module Helpers + # + # Provides helpers for using ImageMagick. These helpers rely on the corresponding ImageMagick + # macro in the controller. See ActionController::Macros::ImageMagick::ClassMethods + # + # You can use the following ImageMagick commands with this helper: + # (see http://imagemagick.org/script/command-line-options.php for a description of what they + # do). + # + # * resize(100x100), aliases s and geometry + # * blur(1.0,1.0), alias blur_image + # * crop(10,10,30,30) + # * colorize(0.5,0.5,0.5,ffff00) + # * equalize + # * flip + # * flop + # * implode(2.0) + # * level(0.3,0.1) + # * normalize + # * oilpaint(2.0) + # * opaque(ffffff,ffff00) + # * posterize(10) + # * sharpen(0.2,0.3) + # * rotate(45) + # * border(10,10,ffff00) + # * trim + # + # And, as a special service to Rails users, this extension has a method that is not + # available for ImageMagick, but can be very useful: + # + # * part(100x100), will give you a part of the image with exactly + # the given proportions (in this case, 100x100 pixels). The original image + # will be resized to match either the required width or height, depending on + # the aspect ratio. The image is then centered and the left and right, or + # top and bottom, slack is cut off. Thus, +part+ will always give you an + # image of the same size. + # + # You can also define and use your own 'recipes'. See the documentation for + # ActionController::Macros::ImageMagick::RecipeSet + # + module ImageMagickMacroHelper + # + # The workings of this function depend on how you enabled the imagemagick extension: + # as a separate action, or as an after_filter for your own action. + # + # === As an action + # + # Returns an image tag for the image with the given +filename, which will be rendered with the + # given ImageMagick +commands+. + # + # +filename_or_params+ should point to an image in the directory you specified with + # +imagemagick_for+. You can have subdirectories, in that case you prepend the + # name of the subdirectory to +filename_or_params+ + # + # +commands+ can be a +String+ of commands, separated by plus signs: + # "resize(100x100)+flop+rotate(45)" + # + # or, +commands+ can be an +Array+ of command strings and command+argument arrays: + # [ ["resize", "100x100"], "flop", ["rotate", "45"] ] + # + # The +options+ will be forwarded to the normal +image_tag+ method (and will be used as + # the html attributes.) The only exception is this +option+: + # :controller:: the name of the controller in which the ImageMagick macro is + # activated. It defaults to the current controller, but you can + # specify something else. + # + # Examples: + # <%= imagemagick_tag "presentation.png", "resize(100x100)+flop", :alt=>"Presentation" %> + # <%= imagemagick_tag "presentation.png", "equalize", :controller=>"photo", :alt=>"Presentation" %> + # <%= imagemagick_tag "presentation.png", "equalize" %> + # <%= imagemagick_tag "rails/presentation.png", "equalize" %> + # + # + # === As an after_filter + # + # Returns an image tag for the action with the parameters in +filename_or_params+ (in +url_form+ format). + # The result of that action will be rendered with the given ImageMagick +commands+. + # + # +filename_or_params+ should be the +url_for+ options hash that points to the action that renders the + # image. You can use any parameters your action need. + # + # +commands+ can be a +String+ of commands, separated by plus signs: + # "resize(100x100)+flop+rotate(45)" + # + # or, +commands+ can be an +Array+ of command strings and command+argument arrays: + # [ ["resize", "100x100"], "flop", ["rotate", "45"] ] + # + # The +options+ will be forwarded to the normal +image_tag+ method (and will be used as + # the html attributes.) + # + # Instead of provinding a separate +commands+ argument, you can also specify the commands as + # the :commands parameters in the +url_for+ hash. (If you have renamed :commands in + # the configuration, you should use the new name instead.) + # + # Examples: + # <%= imagemagick_tag({:action=>'display_image', :id=>10}, 'resize(100x100)+flop', {:alt=>"Presentation"}) %> + # <%= imagemagick_tag({:controller=>'photo', :action=>'display_image', :id=>10}, 'resize(100x100)+flop', {:alt=>"Presentation"}) %> + # <%= imagemagick_tag :action=>'display_image', :id=>10, :user=>10, :other_param=>'abc', :commands=>'equalize' %> + # + def imagemagick_tag(filename_or_params, commands = nil, options = {}) + image_tag_options = Hash.new.merge!(options) + image_tag_options.delete(:controller) + return image_tag(imagemagick_path(filename_or_params, commands, options), image_tag_options) + end + + # + # Returns the path for the image, which will be rendered with the + # given ImageMagick +commands+. + # + # +filename_or_params+ and +commands+ works the same as for +imagemagick_tag+. + # +options+ does nothing. + # + def imagemagick_path(filename_or_params, commands = [], options = {}) + if (filename_or_params.is_a?(Hash)) + return imagemagick_controller(filename_or_params).url_for_imagemagick(filename_or_params, commands) + else + return imagemagick_controller(options).url_for_imagemagick(filename_or_params, commands) + end + end + + private + def imagemagick_controller(options) + options[:controller] ? (options[:controller].camelize + "Controller").constantize.new : @controller + end + end + end +end diff --git a/online/vendor/plugins/imagemagick_tag/test/image_magick_macro_helper_test.rb b/online/vendor/plugins/imagemagick_tag/test/image_magick_macro_helper_test.rb new file mode 100644 index 0000000..e4545e5 --- /dev/null +++ b/online/vendor/plugins/imagemagick_tag/test/image_magick_macro_helper_test.rb @@ -0,0 +1,142 @@ +require 'test/unit' + +begin + require "RMagick" + + class ImageMagickMacroHelperTest < Test::Unit::TestCase + class CustomUrlForController < ActionController::Base + def url_for(options, *parameters_for_method_reference) + options + end + end + + class ImageMagickNonCachingTestController < CustomUrlForController + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick") + end + + class ImageMagickCachingPrerenderingTestController < CustomUrlForController + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick"), + :cache=>"/tmp/imagemagick_cache", + :prerender=>true + end + + class ImageMagickForTagTestController < ActionController::Base + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick") + + def url_for(options, *parameters_for_method_reference) + options.to_s + end + end + class ImageMagickForTagTestRequest + def relative_url_root + "" + end + end + + class ImageMagickCustomActionTestController < CustomUrlForController + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick"), + :action_name=>"customaction" + end + + class ImageMagickForPathAsFilterTestController < CustomUrlForController + imagemagick_filter_for :picture, :id_param=>"image_name" + end + + class ImageMagickForTagAsFilterTestController < ActionController::Base + imagemagick_filter_for :picture + + def url_for(options, *parameters_for_method_reference) + options.to_s + end + end + + include ActionView::Helpers::ImageMagickMacroHelper + + include ActionView::Helpers::UrlHelper + include ActionView::Helpers::TagHelper + include ActionView::Helpers::AssetTagHelper + + def setup + @controller = ImageMagickNonCachingTestController.new + @controller_cache = ImageMagickCachingPrerenderingTestController.new + + FileUtils.mkdir("/tmp/imagemagick_cache") + end + + def teardown + FileUtils.rm_rf("/tmp/imagemagick_cache") + end + + def test_imagemagick_path_without_commands + expected_path = { :action=>"imagemagick", + :id=>"presentation.jpg" } + assert_equal expected_path, imagemagick_path("presentation.jpg") + end + + def test_imagemagick_path_with_commands + expected_path = { :action=>"imagemagick", + :id=>"presentation.jpg", + :commands=>"resize(10)" } + assert_equal expected_path, imagemagick_path("presentation.jpg", [[:resize,10]]) + end + + def test_imagemagick_path_with_prerendering + @controller = @controller_cache + expected_path = { :action=>"imagemagick", + :id=>"presentation.jpg", + :commands=>"resize(10)+equalize" } + assert_equal expected_path, imagemagick_path("presentation.jpg", [[:resize,10],[:equalize]]) + + assert File.exists?("/tmp/imagemagick_cache/ImageMagickMacroHelperTestImageMagickCachingPrerenderingTestController.resize10.equalize.presentation.jpg") + end + + def test_imagemagick_path_other_controller + expected_path = { :action=>"imagemagick", + :id=>"presentation.jpg", + :commands=>"resize(10)+equalize" } + + # should use the ImageMagickCachingPrerenderingTestController + assert_equal expected_path, imagemagick_path("presentation.jpg", [[:resize,10],[:equalize]], + {:controller=>'ImageMagickMacroHelperTest::ImageMagickCachingPrerenderingTest'}) + + assert File.exists?("/tmp/imagemagick_cache/ImageMagickMacroHelperTestImageMagickCachingPrerenderingTestController.resize10.equalize.presentation.jpg") + end + + def test_imagemagick_tag + @controller = ImageMagickForTagTestController.new + @request = ImageMagickForTagTestRequest.new + + assert imagemagick_tag("presentation.jpg") =~ /presentation.jpg/ + assert imagemagick_tag("presentation.jpg", "resize(100x100)") =~ /resize/ + assert imagemagick_tag("presentation.jpg", "x", :height=>100) =~ /height="100"/ + end + + def test_custom_action_imagemagick_path + @controller = ImageMagickCustomActionTestController.new + + expected_path = { :action=>"customaction", + :id=>"presentation.jpg" } + assert_equal expected_path, imagemagick_path("presentation.jpg") + end + + def test_filter_imagemagick_path + @controller = ImageMagickForPathAsFilterTestController.new + + expected_path = { :action=>:picture, + :image_name=>"presentation.jpg", + :commands=>"resize(100)" } + assert_equal expected_path, imagemagick_path({ :action=>:picture, :image_name=>"presentation.jpg" }, "resize(100)") + end + + def test_filter_imagemagick_tag + @controller = ImageMagickForTagAsFilterTestController.new + @request = ImageMagickForTagTestRequest.new + + assert imagemagick_tag({ :action=>:picture, :id=>"presentation.jpg" }) =~ /idpresentation.jpg/ + assert imagemagick_tag({ :action=>:picture, :id=>"presentation.jpg" }, "resize(100)") =~ /idpresentation.jpg.*resize/ + end + end + +rescue LoadError + # RMagick is not installed +end diff --git a/online/vendor/plugins/imagemagick_tag/test/image_magick_macro_test.rb b/online/vendor/plugins/imagemagick_tag/test/image_magick_macro_test.rb new file mode 100644 index 0000000..e491fed --- /dev/null +++ b/online/vendor/plugins/imagemagick_tag/test/image_magick_macro_test.rb @@ -0,0 +1,332 @@ +require 'test/unit' + +begin + require "RMagick" + + class ImageMagickTest < Test::Unit::TestCase + class SquareTestRecipe + def self.execute_recipe_on(image, size) + # non-destructive method, to test the return-image process + image.resize(size.to_i, size.to_i) + end + end + + class ImageMagickTestController < ActionController::Base + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick"), + :cache=>"/tmp/imagemagick_cache" + + imagemagick_recipe :string_ten_pixels, "resize(10!x10!)" + imagemagick_recipe :proc_one_pixel, Proc.new {|image| image.resize!(1,1) } + imagemagick_recipe :method_square, :method_square + imagemagick_recipe :class_square, SquareTestRecipe + + private + def method_square(image, size) + image.resize!(size.to_i, size.to_i) + end + end + + class ImageMagickSubdirTestController < ActionController::Base + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures") + end + + class ImageMagickCustomNameTestController < ActionController::Base + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick"), + :action_name=>"customaction" + end + + class ImageMagickLocalRecipesTestController < ActionController::Base + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick") + + before_filter :add_local_recipes, :only=>:imagemagick + + def wrapper_method + add_local_recipes + imagemagick + end + + private + def method_square(image, size) + image.resize!(size.to_i, size.to_i) + end + + def add_local_recipes + imagemagick_local_recipes.add { |recipes| + recipes.add :local_string_ten_pixels, "resize(10!x10!)" + recipes.add :local_proc_one_pixel, Proc.new {|image| image.resize!(1,1) } + recipes.add :local_method_square, :method_square + recipes.add :local_class_square, SquareTestRecipe + } + end + end + + class ImageMagickLocalRecipesOnlyTestController < ActionController::Base + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick"), + :max_recipe_level=>:local + imagemagick_recipe :local_string_ten_pixels, "resize(10!x10!)" + end + + class ImageMagickGlobalAndLocalRecipesOnlyTestController < ActionController::Base + imagemagick_for File.expand_path(File.dirname(__FILE__) + "/../fixtures/imagemagick"), + :max_recipe_level=>:global + imagemagick_recipe :local_string_ten_pixels, "resize(10!x10!)" + end + + class ImageMagickAsFilterTestController < ActionController::Base + imagemagick_filter_for :picture + + def picture + if @params[:id]=="existing_image" + render :file=>File.dirname(__FILE__) + "/../fixtures/imagemagick/presentation.jpg" + else + render :text=>@params[:id] + end + end + end + + def setup + @controller = ImageMagickTestController.new + + # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get + # a more accurate simulation of what happens in "real life". + @controller.logger = Logger.new(nil) + + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + + FileUtils.mkdir("/tmp/imagemagick_cache") + end + + def teardown + FileUtils.rm_rf("/tmp/imagemagick_cache") + end + + def test_no_resize + get :imagemagick, :id=>"presentation.jpg" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_invalid_filename + get :imagemagick, :id=>"notfound.jpg" + assert_response :missing + end + + def test_resize_blur + get :imagemagick, :id=>"presentation.jpg", :commands=>"s(100x100)+blur(0,1)" + assert_image_with_dimensions 100 + end + + def test_crop_colorize + get :imagemagick, :id=>"presentation.jpg", :commands=>"crop(10,20,40,50)+colorize(0.3,0.3,0.3,dddddd)" + assert_image_with_dimensions 40, 50 + end + + def test_equalize_flip_flop + get :imagemagick, :id=>"presentation.jpg", :commands=>"equalize+flip+flop" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_implode_level_normalize + get :imagemagick, :id=>"presentation.jpg", :commands=>"implode(0.8)+level(0,1.50)+normalize" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_oilpaint_opaque_posterize + get :imagemagick, :id=>"presentation.jpg", :commands=>"oilpaint(3.0)+opaque(fff,f00)+posterize(4)" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_sharpen_rotate_border + get :imagemagick, :id=>"presentation.jpg", :commands=>"sharpen(0.3,0.1)+border(2,2,f00)+rotate(-45)" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_trim + get :imagemagick, :id=>"presentation.jpg", :commands=>"trim" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_part + get :imagemagick, :id=>"presentation.jpg", :commands=>"part(100x100)" + assert_image_with_dimensions 100, 100 + end + + def test_cache + get :imagemagick, :id=>"presentation.jpg", :commands=>"equalize+flip+flop" + assert_equal "image/jpeg", @response.headers["Content-type"] + + assert File.exists?("/tmp/imagemagick_cache/ImageMagickTestImageMagickTestController.equalize.flip.flop.presentation.jpg") + + get :imagemagick, :id=>"presentation.jpg", :commands=>"equalize+flip+flop" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_subdirectory + # tests image-filename-with-path + @controller = ImageMagickSubdirTestController.new + + get :imagemagick, :id=>"imagemagick/presentation.jpg" + assert_equal "image/jpeg", @response.headers["Content-type"] + + get :imagemagick, :id=>"/imagemagick/presentation.jpg" + assert_equal "image/jpeg", @response.headers["Content-type"] + + get :imagemagick, :id=>"../../imagemagick/presentation.jpg" + assert_response :missing + end + + def test_recipe_string + get :imagemagick, :id=>"presentation.jpg", :commands=>"string_ten_pixels" + assert_image_with_dimensions 10, 10 + end + + def test_recipe_proc + get :imagemagick, :id=>"presentation.jpg", :commands=>"proc_one_pixel" + assert_image_with_dimensions 1, 1 + end + + def test_recipe_method + get :imagemagick, :id=>"presentation.jpg", :commands=>"method_square(8)" + assert_image_with_dimensions 8, 8 + end + + def test_recipe_class + get :imagemagick, :id=>"presentation.jpg", :commands=>"class_square(16)" + assert_image_with_dimensions 16, 16 + end + + def test_custom_action_name + @controller = ImageMagickCustomNameTestController.new + get :customaction, :id=>"presentation.jpg" + assert_equal "image/jpeg", @response.headers["Content-type"] + end + + def test_global_recipes + ActionController::Macros::ImageMagick::GlobalRecipes.add do |recipes| + recipes.add :global_string_ten_pixels, "resize(10!x10!)" + recipes.add :global_proc_one_pixel, Proc.new {|image| image.resize!(1,1) } + recipes.add :global_class_square, SquareTestRecipe + end + + # as a string + get :imagemagick, :id=>"presentation.jpg", :commands=>"global_string_ten_pixels" + assert_image_with_dimensions 10, 10 + + # as a proc + get :imagemagick, :id=>"presentation.jpg", :commands=>"global_proc_one_pixel" + assert_image_with_dimensions 1, 1 + + # as a class + get :imagemagick, :id=>"presentation.jpg", :commands=>"global_class_square(16)" + assert_image_with_dimensions 16, 16 + + # for the next tests + ActionController::Macros::ImageMagick::GlobalRecipes.clear + end + + def test_local_recipes_with_wrapper_method + @controller = ImageMagickLocalRecipesTestController.new + + # as a string + get :wrapper_method, :id=>"presentation.jpg", :commands=>"local_string_ten_pixels" + assert_image_with_dimensions 10, 10 + + # as a proc + get :wrapper_method, :id=>"presentation.jpg", :commands=>"local_proc_one_pixel" + assert_image_with_dimensions 1, 1 + + # as a method + get :wrapper_method, :id=>"presentation.jpg", :commands=>"local_method_square(8)" + assert_image_with_dimensions 8, 8 + + # as a class + get :wrapper_method, :id=>"presentation.jpg", :commands=>"local_class_square(16)" + assert_image_with_dimensions 16, 16 + end + + def test_local_recipes_with_filter + @controller = ImageMagickLocalRecipesTestController.new + + # as a string + get :imagemagick, :id=>"presentation.jpg", :commands=>"local_string_ten_pixels" + assert_image_with_dimensions 10, 10 + + # as a proc + get :imagemagick, :id=>"presentation.jpg", :commands=>"local_proc_one_pixel" + assert_image_with_dimensions 1, 1 + + # as a method + get :imagemagick, :id=>"presentation.jpg", :commands=>"local_method_square(8)" + assert_image_with_dimensions 8, 8 + + # as a class + get :imagemagick, :id=>"presentation.jpg", :commands=>"local_class_square(16)" + assert_image_with_dimensions 16, 16 + end + + def test_local_recipes_only + ActionController::Macros::ImageMagick::GlobalRecipes.add :global_string_ten_pixels, "resize(10!x10!)" + + @controller = ImageMagickLocalRecipesOnlyTestController.new + + # local recipe, is allowed + get :imagemagick, :id=>"presentation.jpg", :commands=>"local_string_ten_pixels" + assert_image_with_dimensions 10, 10 + + # global recipe, is not allowed + get :imagemagick, :id=>"presentation.jpg", :commands=>"global_string_ten_pixels" + assert_response 500 + + # builtin recipe, is not allowed + get :imagemagick, :id=>"presentation.jpg", :commands=>"resize(10)" + assert_response 500 + + ActionController::Macros::ImageMagick::GlobalRecipes.clear + end + + def test_global_and_local_recipes_only + ActionController::Macros::ImageMagick::GlobalRecipes.add :global_string_ten_pixels, "resize(10!x10!)" + + @controller = ImageMagickGlobalAndLocalRecipesOnlyTestController.new + + # local recipe, is allowed + get :imagemagick, :id=>"presentation.jpg", :commands=>"local_string_ten_pixels" + assert_image_with_dimensions 10, 10 + + # global recipe, is also allowed + get :imagemagick, :id=>"presentation.jpg", :commands=>"global_string_ten_pixels" + assert_image_with_dimensions 10, 10 + + # builtin recipe, is not allowed + get :imagemagick, :id=>"presentation.jpg", :commands=>"resize(10)" + assert_response 500 + + ActionController::Macros::ImageMagick::GlobalRecipes.clear + end + + def test_filter + @controller = ImageMagickAsFilterTestController.new + + get :picture, :id=>"existing_image", :commands=>"resize(100!x100!)" + assert_image_with_dimensions 100, 100 + + get :picture, :id=>"not_existing_image", :commands=>"resize(100!x100!)" + assert_equal "not_existing_image", @response.body + + get :picture, :id=>"existing_image", :commands=>"unknown_command" + assert_response 500 + end + + private + def assert_image_with_dimensions(width = nil, height = nil) + assert_equal "image/jpeg", @response.headers["Content-type"] + + pic = Magick::Image.from_blob(@response.body)[0] + assert_equal width, pic.columns unless width.nil? + assert_equal height, pic.rows unless height.nil? + end + end + +rescue LoadError + # RMagick is not installed +end diff --git a/online/vendor/plugins/paperclip/.gitignore b/online/vendor/plugins/paperclip/.gitignore new file mode 100644 index 0000000..c0fd8f4 --- /dev/null +++ b/online/vendor/plugins/paperclip/.gitignore @@ -0,0 +1,5 @@ +*~ +*.swp +tmp +test/s3.yml +public diff --git a/online/vendor/plugins/paperclip/LICENSE b/online/vendor/plugins/paperclip/LICENSE new file mode 100644 index 0000000..299b9ed --- /dev/null +++ b/online/vendor/plugins/paperclip/LICENSE @@ -0,0 +1,26 @@ + +LICENSE + +The MIT License + +Copyright (c) 2008 Jon Yurek and thoughtbot, inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + diff --git a/online/vendor/plugins/paperclip/README.rdoc b/online/vendor/plugins/paperclip/README.rdoc new file mode 100644 index 0000000..f4ae68b --- /dev/null +++ b/online/vendor/plugins/paperclip/README.rdoc @@ -0,0 +1,179 @@ +=Paperclip + +Paperclip is intended as an easy file attachment library for ActiveRecord. The +intent behind it was to keep setup as easy as possible and to treat files as +much like other attributes as possible. This means they aren't saved to their +final locations on disk, nor are they deleted if set to nil, until +ActiveRecord::Base#save is called. It manages validations based on size and +presence, if required. It can transform its assigned image into thumbnails if +needed, and the prerequisites are as simple as installing ImageMagick (which, +for most modern Unix-based systems, is as easy as installing the right +packages). Attached files are saved to the filesystem and referenced in the +browser by an easily understandable specification, which has sensible and +useful defaults. + +See the documentation for +has_attached_file+ in Paperclip::ClassMethods for +more detailed options. + +==Quick Start + +In your model: + + class User < ActiveRecord::Base + has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" } + end + +In your migrations: + + class AddAvatarColumnsToUser < ActiveRecord::Migration + def self.up + add_column :users, :avatar_file_name, :string + add_column :users, :avatar_content_type, :string + add_column :users, :avatar_file_size, :integer + add_column :users, :avatar_updated_at, :datetime + end + + def self.down + remove_column :users, :avatar_file_name + remove_column :users, :avatar_content_type + remove_column :users, :avatar_file_size + remove_column :users, :avatar_updated_at + end + end + +In your edit and new views: + + <% form_for :user, @user, :url => user_path, :html => { :multipart => true } do |form| %> + <%= form.file_field :avatar %> + <% end %> + +In your controller: + + def create + @user = User.create( params[:user] ) + end + +In your show view: + + <%= image_tag @user.avatar.url %> + <%= image_tag @user.avatar.url(:medium) %> + <%= image_tag @user.avatar.url(:thumb) %> + +==Usage + +The basics of paperclip are quite simple: Declare that your model has an +attachment with the has_attached_file method, and give it a name. Paperclip +will wrap up up to four attributes (all prefixed with that attachment's name, +so you can have multiple attachments per model if you wish) and give the a +friendly front end. The attributes are _file_name, +_file_size, _content_type, and _updated_at. +Only _file_name is required for paperclip to operate. More +information about the options to has_attached_file is available in the +documentation of Paperclip::ClassMethods. + +Attachments can be validated with Paperclip's validation methods, +validates_attachment_presence, validates_attachment_content_type, and +validates_attachment_size. + +==Storage + +The files that are assigned as attachments are, by default, placed in the +directory specified by the :path option to has_attached_file. By default, this +location is ":rails_root/public/system/:attachment/:id/:style/:filename". This +location was chosen because on standard Capistrano deployments, the +public/system directory is symlinked to the app's shared directory, meaning it +will survive between deployments. For example, using that :path, you may have a +file at + + /data/myapp/releases/20081229172410/public/system/avatars/13/small/my_pic.png + +NOTE: This is a change from previous versions of Paperclip, but is overall a +safer choice for the default file store. + +You may also choose to store your files using Amazon's S3 service. You can find +more information about S3 storage at the description for +Paperclip::Storage::S3. + +Files on the local filesystem (and in the Rails app's public directory) will be +available to the internet at large. If you require access control, it's +possible to place your files in a different location. You will need to change +both the :path and :url options in order to make sure the files are unavailable +to the public. Both :path and :url allow the same set of interpolated +variables. + +==Post Processing + +Paperclip supports an extensible selection of post-processors. When you define +a set of styles for an attachment, by default it is expected that those +"styles" are actually "thumbnails". However, you can do much more than just +thumbnail images. By defining a subclass of Paperclip::Processor, you can +perform any processing you want on the files that are attached. Any file in +your Rails app's lib/paperclip_processors directory is automatically loaded by +paperclip, allowing you to easily define custom processors. You can specify a +processor with the :processors option to has_attached_file: + + has_attached_file :scan, :styles => { :text => { :quality => :better } }, + :processors => [:ocr] + +This would load the hypothetical class Paperclip::Ocr, which would have the +hash "{ :quality => :better }" passed to it along with the uploaded file. For +more information about defining processors, see Paperclip::Processor. + +The default processor is Paperclip::Thumbnail. For backwards compatability +reasons, you can pass a single geometry string or an array containing a +geometry and a format, which the file will be converted to, like so: + + has_attached_file :avatar, :styles => { :thumb => ["32x32#", :png] } + +This will convert the "thumb" style to a 32x32 square in png format, regardless +of what was uploaded. If the format is not specified, it is kept the same (i.e. +jpgs will remain jpgs). + +Multiple processors can be specified, and they will be invoked in the order +they are defined in the :processors array. Each successive processor will +be given the result of the previous processor's execution. All processors will +receive the same parameters, which are what you define in the :styles hash. +For example, assuming we had this definition: + + has_attached_file :scan, :styles => { :text => { :quality => :better } }, + :processors => [:rotator, :ocr] + +then both the :rotator processor and the :ocr processor would receive the +options "{ :quality => :better }". This parameter may not mean anything to one +or more or the processors, and they are expected to ignore it. + +NOTE: Because processors operate by turning the original attachment into the +styles, no processors will be run if there are no styles defined. + +==Events + +Before and after the Post Processing step, Paperclip calls back to the model +with a few callbacks, allowing the model to change or cancel the processing +step. The callbacks are "before_post_process" and "after_post_process" (which +are called before and after the processing of each attachment), and the +attachment-specific "before__post_process" and +"after__post_process". The callbacks are intended to be as close to +normal ActiveRecord callbacks as possible, so if you return false (specifically +- returning nil is not the same) in a before_ filter, the post processing step +will halt. Returning false in an after_ filter will not halt anything, but you +can access the model and the attachment if necessary. + +NOTE: Post processing will not even *start* if the attachment is not valid +according to the validations. Your callbacks and processors will *only* be +called with valid attachments. + +==Testing + +Paperclip provides rspec-compatible matchers for testing attachments. See the +documentation on Paperclip::Shoulda::Matchers for more information. + +==Contributing + +If you'd like to contribute a feature or bugfix: Thanks! To make sure your +fix/feature has a high chance of being included, please read the following +guidelines: + +1. Ask on the mailing list, or post a new GitHub Issue. +2. Make sure there are tests! We will not accept any patch that is not tested. + It's a rare time when explicit tests aren't needed. If you have questions + about writing tests for paperclip, please ask the mailing list. diff --git a/online/vendor/plugins/paperclip/Rakefile b/online/vendor/plugins/paperclip/Rakefile new file mode 100644 index 0000000..b7954e6 --- /dev/null +++ b/online/vendor/plugins/paperclip/Rakefile @@ -0,0 +1,103 @@ +require 'rake' +require 'rake/testtask' +require 'rake/rdoctask' + +$LOAD_PATH << File.join(File.dirname(__FILE__), 'lib') +require 'paperclip' + +desc 'Default: run unit tests.' +task :default => [:clean, :test] + +desc 'Test the paperclip plugin.' +Rake::TestTask.new(:test) do |t| + t.libs << 'lib' << 'profile' + t.pattern = 'test/**/*_test.rb' + t.verbose = true +end + +desc 'Start an IRB session with all necessary files required.' +task :shell do |t| + chdir File.dirname(__FILE__) + exec 'irb -I lib/ -I lib/paperclip -r rubygems -r active_record -r tempfile -r init' +end + +desc 'Generate documentation for the paperclip plugin.' +Rake::RDocTask.new(:rdoc) do |rdoc| + rdoc.rdoc_dir = 'doc' + rdoc.title = 'Paperclip' + rdoc.options << '--line-numbers' << '--inline-source' + rdoc.rdoc_files.include('README*') + rdoc.rdoc_files.include('lib/**/*.rb') +end + +desc 'Update documentation on website' +task :sync_docs => 'rdoc' do + `rsync -ave ssh doc/ dev@dev.thoughtbot.com:/home/dev/www/dev.thoughtbot.com/paperclip` +end + +desc 'Clean up files.' +task :clean do |t| + FileUtils.rm_rf "doc" + FileUtils.rm_rf "tmp" + FileUtils.rm_rf "pkg" + FileUtils.rm "test/debug.log" rescue nil + FileUtils.rm "test/paperclip.db" rescue nil + Dir.glob("paperclip-*.gem").each{|f| FileUtils.rm f } +end + +include_file_globs = ["README*", + "LICENSE", + "Rakefile", + "init.rb", + "{generators,lib,tasks,test,shoulda_macros}/**/*"] +exclude_file_globs = ["test/s3.yml", + "test/debug.log", + "test/paperclip.db", + "test/doc", + "test/doc/*", + "test/pkg", + "test/pkg/*", + "test/tmp", + "test/tmp/*"] +spec = Gem::Specification.new do |s| + s.name = "paperclip" + s.version = Paperclip::VERSION + s.author = "Jon Yurek" + s.email = "jyurek@thoughtbot.com" + s.homepage = "http://www.thoughtbot.com/projects/paperclip" + s.platform = Gem::Platform::RUBY + s.summary = "File attachments as attributes for ActiveRecord" + s.files = FileList[include_file_globs].to_a - FileList[exclude_file_globs].to_a + s.require_path = "lib" + s.test_files = FileList["test/**/test_*.rb"].to_a + s.rubyforge_project = "paperclip" + s.has_rdoc = true + s.extra_rdoc_files = FileList["README*"].to_a + s.rdoc_options << '--line-numbers' << '--inline-source' + s.requirements << "ImageMagick" + s.add_development_dependency 'shoulda' + s.add_development_dependency 'jferris-mocha', '>= 0.9.5.0.1241126838' + s.add_development_dependency 'aws-s3' + s.add_development_dependency 'sqlite3-ruby' + s.add_development_dependency 'activerecord' + s.add_development_dependency 'activesupport' +end + +desc "Print a list of the files to be put into the gem" +task :manifest => :clean do + spec.files.each do |file| + puts file + end +end + +desc "Generate a gemspec file for GitHub" +task :gemspec => :clean do + File.open("#{spec.name}.gemspec", 'w') do |f| + f.write spec.to_ruby + end +end + +desc "Build the gem into the current directory" +task :gem => :gemspec do + `gem build #{spec.name}.gemspec` +end diff --git a/online/vendor/plugins/paperclip/cucumber/paperclip_steps.rb b/online/vendor/plugins/paperclip/cucumber/paperclip_steps.rb new file mode 100644 index 0000000..fac0c12 --- /dev/null +++ b/online/vendor/plugins/paperclip/cucumber/paperclip_steps.rb @@ -0,0 +1,6 @@ +When /^I attach an? "([^\"]*)" "([^\"]*)" file to an? "([^\"]*)" on S3$/ do |attachment, extension, model| + stub_paperclip_s3(model, attachment, extension) + attach_file attachment, + "features/support/paperclip/#{model.gsub(" ", "_").underscore}/#{attachment}.#{extension}" +end + diff --git a/online/vendor/plugins/paperclip/generators/paperclip/USAGE b/online/vendor/plugins/paperclip/generators/paperclip/USAGE new file mode 100644 index 0000000..2d611d7 --- /dev/null +++ b/online/vendor/plugins/paperclip/generators/paperclip/USAGE @@ -0,0 +1,5 @@ +Usage: + + script/generate paperclip Class attachment1 (attachment2 ...) + +This will create a migration that will add the proper columns to your class's table. \ No newline at end of file diff --git a/online/vendor/plugins/paperclip/generators/paperclip/paperclip_generator.rb b/online/vendor/plugins/paperclip/generators/paperclip/paperclip_generator.rb new file mode 100644 index 0000000..77ee5a2 --- /dev/null +++ b/online/vendor/plugins/paperclip/generators/paperclip/paperclip_generator.rb @@ -0,0 +1,27 @@ +class PaperclipGenerator < Rails::Generator::NamedBase + attr_accessor :attachments, :migration_name + + def initialize(args, options = {}) + super + @class_name, @attachments = args[0], args[1..-1] + end + + def manifest + file_name = generate_file_name + @migration_name = file_name.camelize + record do |m| + m.migration_template "paperclip_migration.rb.erb", + File.join('db', 'migrate'), + :migration_file_name => file_name + end + end + + private + + def generate_file_name + names = attachments.map{|a| a.underscore } + names = names[0..-2] + ["and", names[-1]] if names.length > 1 + "add_attachments_#{names.join("_")}_to_#{@class_name.underscore}" + end + +end diff --git a/online/vendor/plugins/paperclip/generators/paperclip/templates/paperclip_migration.rb.erb b/online/vendor/plugins/paperclip/generators/paperclip/templates/paperclip_migration.rb.erb new file mode 100644 index 0000000..eebb0e5 --- /dev/null +++ b/online/vendor/plugins/paperclip/generators/paperclip/templates/paperclip_migration.rb.erb @@ -0,0 +1,19 @@ +class <%= migration_name %> < ActiveRecord::Migration + def self.up +<% attachments.each do |attachment| -%> + add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_name, :string + add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_content_type, :string + add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_size, :integer + add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_updated_at, :datetime +<% end -%> + end + + def self.down +<% attachments.each do |attachment| -%> + remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_name + remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_content_type + remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_size + remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_updated_at +<% end -%> + end +end diff --git a/online/vendor/plugins/paperclip/init.rb b/online/vendor/plugins/paperclip/init.rb new file mode 100644 index 0000000..5a07dda --- /dev/null +++ b/online/vendor/plugins/paperclip/init.rb @@ -0,0 +1 @@ +require File.join(File.dirname(__FILE__), "lib", "paperclip") diff --git a/online/vendor/plugins/paperclip/lib/paperclip.rb b/online/vendor/plugins/paperclip/lib/paperclip.rb new file mode 100644 index 0000000..e6e062f --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip.rb @@ -0,0 +1,357 @@ +# Paperclip allows file attachments that are stored in the filesystem. All graphical +# transformations are done using the Graphics/ImageMagick command line utilities and +# are stored in Tempfiles until the record is saved. Paperclip does not require a +# separate model for storing the attachment's information, instead adding a few simple +# columns to your table. +# +# Author:: Jon Yurek +# Copyright:: Copyright (c) 2008-2009 thoughtbot, inc. +# License:: MIT License (http://www.opensource.org/licenses/mit-license.php) +# +# Paperclip defines an attachment as any file, though it makes special considerations +# for image files. You can declare that a model has an attached file with the +# +has_attached_file+ method: +# +# class User < ActiveRecord::Base +# has_attached_file :avatar, :styles => { :thumb => "100x100" } +# end +# +# user = User.new +# user.avatar = params[:user][:avatar] +# user.avatar.url +# # => "/users/avatars/4/original_me.jpg" +# user.avatar.url(:thumb) +# # => "/users/avatars/4/thumb_me.jpg" +# +# See the +has_attached_file+ documentation for more details. + +require 'erb' +require 'tempfile' +require 'paperclip/upfile' +require 'paperclip/iostream' +require 'paperclip/geometry' +require 'paperclip/processor' +require 'paperclip/thumbnail' +require 'paperclip/storage' +require 'paperclip/interpolations' +require 'paperclip/style' +require 'paperclip/attachment' +if defined? RAILS_ROOT + Dir.glob(File.join(File.expand_path(RAILS_ROOT), "lib", "paperclip_processors", "*.rb")).each do |processor| + require processor + end +end + +# The base module that gets included in ActiveRecord::Base. See the +# documentation for Paperclip::ClassMethods for more useful information. +module Paperclip + + VERSION = "2.3.1.1" + + class << self + # Provides configurability to Paperclip. There are a number of options available, such as: + # * whiny: Will raise an error if Paperclip cannot process thumbnails of + # an uploaded image. Defaults to true. + # * log: Logs progress to the Rails log. Uses ActiveRecord's logger, so honors + # log levels, etc. Defaults to true. + # * command_path: Defines the path at which to find the command line + # programs if they are not visible to Rails the system's search path. Defaults to + # nil, which uses the first executable found in the user's search path. + # * image_magick_path: Deprecated alias of command_path. + def options + @options ||= { + :whiny => true, + :image_magick_path => nil, + :command_path => nil, + :log => true, + :log_command => false, + :swallow_stderr => true + } + end + + def path_for_command command #:nodoc: + if options[:image_magick_path] + warn("[DEPRECATION] :image_magick_path is deprecated and will be removed. Use :command_path instead") + end + path = [options[:command_path] || options[:image_magick_path], command].compact + File.join(*path) + end + + def interpolates key, &block + Paperclip::Interpolations[key] = block + end + + # The run method takes a command to execute and a string of parameters + # that get passed to it. The command is prefixed with the :command_path + # option from Paperclip.options. If you have many commands to run and + # they are in different paths, the suggested course of action is to + # symlink them so they are all in the same directory. + # + # If the command returns with a result code that is not one of the + # expected_outcodes, a PaperclipCommandLineError will be raised. Generally + # a code of 0 is expected, but a list of codes may be passed if necessary. + # + # This method can log the command being run when + # Paperclip.options[:log_command] is set to true (defaults to false). This + # will only log if logging in general is set to true as well. + def run cmd, params = "", expected_outcodes = 0 + command = %Q[#{path_for_command(cmd)} #{params}].gsub(/\s+/, " ") + command = "#{command} 2>#{bit_bucket}" if Paperclip.options[:swallow_stderr] + Paperclip.log(command) if Paperclip.options[:log_command] + output = `#{command}` + unless [expected_outcodes].flatten.include?($?.exitstatus) + raise PaperclipCommandLineError, "Error while running #{cmd}" + end + output + end + + def bit_bucket #:nodoc: + File.exists?("/dev/null") ? "/dev/null" : "NUL" + end + + def included base #:nodoc: + base.extend ClassMethods + unless base.respond_to?(:define_callbacks) + base.send(:include, Paperclip::CallbackCompatability) + end + end + + def processor name #:nodoc: + name = name.to_s.camelize + processor = Paperclip.const_get(name) + unless processor.ancestors.include?(Paperclip::Processor) + raise PaperclipError.new("Processor #{name} was not found") + end + processor + end + + # Log a paperclip-specific line. Uses ActiveRecord::Base.logger + # by default. Set Paperclip.options[:log] to false to turn off. + def log message + logger.info("[paperclip] #{message}") if logging? + end + + def logger #:nodoc: + ActiveRecord::Base.logger + end + + def logging? #:nodoc: + options[:log] + end + end + + class PaperclipError < StandardError #:nodoc: + end + + class PaperclipCommandLineError < StandardError #:nodoc: + end + + class NotIdentifiedByImageMagickError < PaperclipError #:nodoc: + end + + class InfiniteInterpolationError < PaperclipError #:nodoc: + end + + module ClassMethods + # +has_attached_file+ gives the class it is called on an attribute that maps to a file. This + # is typically a file stored somewhere on the filesystem and has been uploaded by a user. + # The attribute returns a Paperclip::Attachment object which handles the management of + # that file. The intent is to make the attachment as much like a normal attribute. The + # thumbnails will be created when the new file is assigned, but they will *not* be saved + # until +save+ is called on the record. Likewise, if the attribute is set to +nil+ is + # called on it, the attachment will *not* be deleted until +save+ is called. See the + # Paperclip::Attachment documentation for more specifics. There are a number of options + # you can set to change the behavior of a Paperclip attachment: + # * +url+: The full URL of where the attachment is publically accessible. This can just + # as easily point to a directory served directly through Apache as it can to an action + # that can control permissions. You can specify the full domain and path, but usually + # just an absolute path is sufficient. The leading slash *must* be included manually for + # absolute paths. The default value is + # "/system/:attachment/:id/:style/:filename". See + # Paperclip::Attachment#interpolate for more information on variable interpolaton. + # :url => "/:class/:attachment/:id/:style_:filename" + # :url => "http://some.other.host/stuff/:class/:id_:extension" + # * +default_url+: The URL that will be returned if there is no attachment assigned. + # This field is interpolated just as the url is. The default value is + # "/:attachment/:style/missing.png" + # has_attached_file :avatar, :default_url => "/images/default_:style_avatar.png" + # User.new.avatar_url(:small) # => "/images/default_small_avatar.png" + # * +styles+: A hash of thumbnail styles and their geometries. You can find more about + # geometry strings at the ImageMagick website + # (http://www.imagemagick.org/script/command-line-options.php#resize). Paperclip + # also adds the "#" option (e.g. "50x50#"), which will resize the image to fit maximally + # inside the dimensions and then crop the rest off (weighted at the center). The + # default value is to generate no thumbnails. + # * +default_style+: The thumbnail style that will be used by default URLs. + # Defaults to +original+. + # has_attached_file :avatar, :styles => { :normal => "100x100#" }, + # :default_style => :normal + # user.avatar.url # => "/avatars/23/normal_me.png" + # * +whiny+: Will raise an error if Paperclip cannot post_process an uploaded file due + # to a command line error. This will override the global setting for this attachment. + # Defaults to true. This option used to be called :whiny_thumbanils, but this is + # deprecated. + # * +convert_options+: When creating thumbnails, use this free-form options + # field to pass in various convert command options. Typical options are "-strip" to + # remove all Exif data from the image (save space for thumbnails and avatars) or + # "-depth 8" to specify the bit depth of the resulting conversion. See ImageMagick + # convert documentation for more options: (http://www.imagemagick.org/script/convert.php) + # Note that this option takes a hash of options, each of which correspond to the style + # of thumbnail being generated. You can also specify :all as a key, which will apply + # to all of the thumbnails being generated. If you specify options for the :original, + # it would be best if you did not specify destructive options, as the intent of keeping + # the original around is to regenerate all the thumbnails when requirements change. + # has_attached_file :avatar, :styles => { :large => "300x300", :negative => "100x100" } + # :convert_options => { + # :all => "-strip", + # :negative => "-negate" + # } + # NOTE: While not deprecated yet, it is not recommended to specify options this way. + # It is recommended that :convert_options option be included in the hash passed to each + # :styles for compatability with future versions. + # * +storage+: Chooses the storage backend where the files will be stored. The current + # choices are :filesystem and :s3. The default is :filesystem. Make sure you read the + # documentation for Paperclip::Storage::Filesystem and Paperclip::Storage::S3 + # for backend-specific options. + def has_attached_file name, options = {} + include InstanceMethods + + write_inheritable_attribute(:attachment_definitions, {}) if attachment_definitions.nil? + attachment_definitions[name] = {:validations => []}.merge(options) + + after_save :save_attached_files + before_destroy :destroy_attached_files + + define_callbacks :before_post_process, :after_post_process + define_callbacks :"before_#{name}_post_process", :"after_#{name}_post_process" + + define_method name do |*args| + a = attachment_for(name) + (args.length > 0) ? a.to_s(args.first) : a + end + + define_method "#{name}=" do |file| + attachment_for(name).assign(file) + end + + define_method "#{name}?" do + attachment_for(name).file? + end + + validates_each(name) do |record, attr, value| + attachment = record.attachment_for(name) + attachment.send(:flush_errors) + end + end + + # Places ActiveRecord-style validations on the size of the file assigned. The + # possible options are: + # * +in+: a Range of bytes (i.e. +1..1.megabyte+), + # * +less_than+: equivalent to :in => 0..options[:less_than] + # * +greater_than+: equivalent to :in => options[:greater_than]..Infinity + # * +message+: error message to display, use :min and :max as replacements + # * +if+: A lambda or name of a method on the instance. Validation will only + # be run is this lambda or method returns true. + # * +unless+: Same as +if+ but validates if lambda or method returns false. + def validates_attachment_size name, options = {} + min = options[:greater_than] || (options[:in] && options[:in].first) || 0 + max = options[:less_than] || (options[:in] && options[:in].last) || (1.0/0) + range = (min..max) + message = options[:message] || "file size must be between :min and :max bytes." + message = message.gsub(/:min/, min.to_s).gsub(/:max/, max.to_s) + + validates_inclusion_of :"#{name}_file_size", + :in => range, + :message => message, + :if => options[:if], + :unless => options[:unless] + end + + # Adds errors if thumbnail creation fails. The same as specifying :whiny_thumbnails => true. + def validates_attachment_thumbnails name, options = {} + warn('[DEPRECATION] validates_attachment_thumbnail is deprecated. ' + + 'This validation is on by default and will be removed from future versions. ' + + 'If you wish to turn it off, supply :whiny => false in your definition.') + attachment_definitions[name][:whiny_thumbnails] = true + end + + # Places ActiveRecord-style validations on the presence of a file. + # Options: + # * +if+: A lambda or name of a method on the instance. Validation will only + # be run is this lambda or method returns true. + # * +unless+: Same as +if+ but validates if lambda or method returns false. + def validates_attachment_presence name, options = {} + message = options[:message] || "must be set." + validates_presence_of :"#{name}_file_name", + :message => message, + :if => options[:if], + :unless => options[:unless] + end + + # Places ActiveRecord-style validations on the content type of the file + # assigned. The possible options are: + # * +content_type+: Allowed content types. Can be a single content type + # or an array. Each type can be a String or a Regexp. It should be + # noted that Internet Explorer upload files with content_types that you + # may not expect. For example, JPEG images are given image/pjpeg and + # PNGs are image/x-png, so keep that in mind when determining how you + # match. Allows all by default. + # * +message+: The message to display when the uploaded file has an invalid + # content type. + # * +if+: A lambda or name of a method on the instance. Validation will only + # be run is this lambda or method returns true. + # * +unless+: Same as +if+ but validates if lambda or method returns false. + # NOTE: If you do not specify an [attachment]_content_type field on your + # model, content_type validation will work _ONLY upon assignment_ and + # re-validation after the instance has been reloaded will always succeed. + def validates_attachment_content_type name, options = {} + types = [options.delete(:content_type)].flatten + validates_each(:"#{name}_content_type", options) do |record, attr, value| + unless types.any?{|t| t === value } + record.errors.add(:"#{name}_content_type", :inclusion, :default => options[:message], :value => value) + end + end + end + + # Returns the attachment definitions defined by each call to + # has_attached_file. + def attachment_definitions + read_inheritable_attribute(:attachment_definitions) + end + end + + module InstanceMethods #:nodoc: + def attachment_for name + @_paperclip_attachments ||= {} + @_paperclip_attachments[name] ||= Attachment.new(name, self, self.class.attachment_definitions[name]) + end + + def each_attachment + self.class.attachment_definitions.each do |name, definition| + yield(name, attachment_for(name)) + end + end + + def save_attached_files + logger.info("[paperclip] Saving attachments.") + each_attachment do |name, attachment| + attachment.send(:save) + end + end + + def destroy_attached_files + logger.info("[paperclip] Deleting attachments.") + each_attachment do |name, attachment| + attachment.send(:queue_existing_for_delete) + attachment.send(:flush_deletes) + end + end + end + +end + +# Set it all up. +if Object.const_defined?("ActiveRecord") + ActiveRecord::Base.send(:include, Paperclip) + File.send(:include, Paperclip::Upfile) +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/attachment.rb b/online/vendor/plugins/paperclip/lib/paperclip/attachment.rb new file mode 100644 index 0000000..2a45a8c --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/attachment.rb @@ -0,0 +1,334 @@ +# encoding: utf-8 +module Paperclip + # The Attachment class manages the files for a given attachment. It saves + # when the model saves, deletes when the model is destroyed, and processes + # the file upon assignment. + class Attachment + + def self.default_options + @default_options ||= { + :url => "/system/:attachment/:id/:style/:filename", + :path => ":rails_root/public:url", + :styles => {}, + :processors => [:thumbnail], + :convert_options => {}, + :default_url => "/:attachment/:style/missing.png", + :default_style => :original, + :storage => :filesystem, + :whiny => Paperclip.options[:whiny] || Paperclip.options[:whiny_thumbnails] + } + end + + attr_reader :name, :instance, :default_style, :convert_options, :queued_for_write, :whiny, :options + + # Creates an Attachment object. +name+ is the name of the attachment, + # +instance+ is the ActiveRecord object instance it's attached to, and + # +options+ is the same as the hash passed to +has_attached_file+. + def initialize name, instance, options = {} + @name = name + @instance = instance + + options = self.class.default_options.merge(options) + + @url = options[:url] + @url = @url.call(self) if @url.is_a?(Proc) + @path = options[:path] + @path = @path.call(self) if @path.is_a?(Proc) + @styles = options[:styles] + @normalized_styles = nil + @default_url = options[:default_url] + @default_style = options[:default_style] + @storage = options[:storage] + @whiny = options[:whiny_thumbnails] || options[:whiny] + @convert_options = options[:convert_options] + @processors = options[:processors] + @options = options + @queued_for_delete = [] + @queued_for_write = {} + @errors = {} + @dirty = false + + initialize_storage + end + + def styles + unless @normalized_styles + @normalized_styles = {} + (@styles.respond_to?(:call) ? @styles.call(self) : @styles).each do |name, args| + @normalized_styles[name] = Paperclip::Style.new(name, args, self) + end + end + @normalized_styles + end + + def processors + @processors.respond_to?(:call) ? @processors.call(instance) : @processors + end + + # What gets called when you call instance.attachment = File. It clears + # errors, assigns attributes, and processes the file. It + # also queues up the previous file for deletion, to be flushed away on + # #save of its host. In addition to form uploads, you can also assign + # another Paperclip attachment: + # new_user.avatar = old_user.avatar + def assign uploaded_file + ensure_required_accessors! + + if uploaded_file.is_a?(Paperclip::Attachment) + uploaded_file = uploaded_file.to_file(:original) + close_uploaded_file = uploaded_file.respond_to?(:close) + end + + return nil unless valid_assignment?(uploaded_file) + + uploaded_file.binmode if uploaded_file.respond_to? :binmode + self.clear + + return nil if uploaded_file.nil? + + @queued_for_write[:original] = uploaded_file.to_tempfile + instance_write(:file_name, uploaded_file.original_filename.strip.gsub(/[^A-Za-z\d\.\-_]+/, '_')) + instance_write(:content_type, uploaded_file.content_type.to_s.strip) + instance_write(:file_size, uploaded_file.size.to_i) + instance_write(:updated_at, Time.now) + + @dirty = true + + post_process + + # Reset the file size if the original file was reprocessed. + instance_write(:file_size, @queued_for_write[:original].size.to_i) + ensure + uploaded_file.close if close_uploaded_file + end + + # Returns the public URL of the attachment, with a given style. Note that + # this does not necessarily need to point to a file that your web server + # can access and can point to an action in your app, if you need fine + # grained security. This is not recommended if you don't need the + # security, however, for performance reasons. set + # include_updated_timestamp to false if you want to stop the attachment + # update time appended to the url + def url style_name = default_style, include_updated_timestamp = true + url = original_filename.nil? ? interpolate(@default_url, style_name) : interpolate(@url, style_name) + include_updated_timestamp && updated_at ? [url, updated_at].compact.join(url.include?("?") ? "&" : "?") : url + end + + # Returns the path of the attachment as defined by the :path option. If the + # file is stored in the filesystem the path refers to the path of the file + # on disk. If the file is stored in S3, the path is the "key" part of the + # URL, and the :bucket option refers to the S3 bucket. + def path style_name = default_style + original_filename.nil? ? nil : interpolate(@path, style_name) + end + + # Alias to +url+ + def to_s style_name = nil + url(style_name) + end + + # Returns an array containing the errors on this attachment. + def errors + @errors + end + + # Returns true if there are changes that need to be saved. + def dirty? + @dirty + end + + # Saves the file, if there are no errors. If there are, it flushes them to + # the instance's errors and returns false, cancelling the save. + def save + flush_deletes + flush_writes + @dirty = false + true + end + + # Clears out the attachment. Has the same effect as previously assigning + # nil to the attachment. Does NOT save. If you wish to clear AND save, + # use #destroy. + def clear + queue_existing_for_delete + @errors = {} + end + + # Destroys the attachment. Has the same effect as previously assigning + # nil to the attachment *and saving*. This is permanent. If you wish to + # wipe out the existing attachment but not save, use #clear. + def destroy + clear + save + end + + # Returns the name of the file as originally assigned, and lives in the + # _file_name attribute of the model. + def original_filename + instance_read(:file_name) + end + + # Returns the size of the file as originally assigned, and lives in the + # _file_size attribute of the model. + def size + instance_read(:file_size) || (@queued_for_write[:original] && @queued_for_write[:original].size) + end + + # Returns the content_type of the file as originally assigned, and lives + # in the _content_type attribute of the model. + def content_type + instance_read(:content_type) + end + + # Returns the last modified time of the file as originally assigned, and + # lives in the _updated_at attribute of the model. + def updated_at + time = instance_read(:updated_at) + time && time.to_f.to_i + end + + # Paths and URLs can have a number of variables interpolated into them + # to vary the storage location based on name, id, style, class, etc. + # This method is a deprecated access into supplying and retrieving these + # interpolations. Future access should use either Paperclip.interpolates + # or extend the Paperclip::Interpolations module directly. + def self.interpolations + warn('[DEPRECATION] Paperclip::Attachment.interpolations is deprecated ' + + 'and will be removed from future versions. ' + + 'Use Paperclip.interpolates instead') + Paperclip::Interpolations + end + + # This method really shouldn't be called that often. It's expected use is + # in the paperclip:refresh rake task and that's it. It will regenerate all + # thumbnails forcefully, by reobtaining the original file and going through + # the post-process again. + def reprocess! + new_original = Tempfile.new("paperclip-reprocess") + new_original.binmode + if old_original = to_file(:original) + new_original.write( old_original.read ) + new_original.rewind + + @queued_for_write = { :original => new_original } + post_process + + old_original.close if old_original.respond_to?(:close) + + save + else + true + end + end + + # Returns true if a file has been assigned. + def file? + !original_filename.blank? + end + + # Writes the attachment-specific attribute on the instance. For example, + # instance_write(:file_name, "me.jpg") will write "me.jpg" to the instance's + # "avatar_file_name" field (assuming the attachment is called avatar). + def instance_write(attr, value) + setter = :"#{name}_#{attr}=" + responds = instance.respond_to?(setter) + self.instance_variable_set("@_#{setter.to_s.chop}", value) + instance.send(setter, value) if responds || attr.to_s == "file_name" + end + + # Reads the attachment-specific attribute on the instance. See instance_write + # for more details. + def instance_read(attr) + getter = :"#{name}_#{attr}" + responds = instance.respond_to?(getter) + cached = self.instance_variable_get("@_#{getter}") + return cached if cached + instance.send(getter) if responds || attr.to_s == "file_name" + end + + private + + def ensure_required_accessors! #:nodoc: + %w(file_name).each do |field| + unless @instance.respond_to?("#{name}_#{field}") && @instance.respond_to?("#{name}_#{field}=") + raise PaperclipError.new("#{@instance.class} model missing required attr_accessor for '#{name}_#{field}'") + end + end + end + + def log message #:nodoc: + Paperclip.log(message) + end + + def valid_assignment? file #:nodoc: + file.nil? || (file.respond_to?(:original_filename) && file.respond_to?(:content_type)) + end + + def initialize_storage #:nodoc: + @storage_module = Paperclip::Storage.const_get(@storage.to_s.capitalize) + self.extend(@storage_module) + end + + def extra_options_for(style) #:nodoc: + all_options = convert_options[:all] + all_options = all_options.call(instance) if all_options.respond_to?(:call) + style_options = convert_options[style] + style_options = style_options.call(instance) if style_options.respond_to?(:call) + + [ style_options, all_options ].compact.join(" ") + end + + def post_process #:nodoc: + return if @queued_for_write[:original].nil? + return if fire_events(:before) + post_process_styles + return if fire_events(:after) + end + + def fire_events(which) #:nodoc: + return true if callback(:"#{which}_post_process") == false + return true if callback(:"#{which}_#{name}_post_process") == false + end + + def callback which #:nodoc: + instance.run_callbacks(which, @queued_for_write){|result, obj| result == false } + end + + def post_process_styles #:nodoc: + styles.each do |name, style| + begin + raise RuntimeError.new("Style #{name} has no processors defined.") if style.processors.blank? + @queued_for_write[name] = style.processors.inject(@queued_for_write[:original]) do |file, processor| + Paperclip.processor(processor).make(file, style.processor_options, self) + end + rescue PaperclipError => e + log("An error was received while processing: #{e.inspect}") + (@errors[:processing] ||= []) << e.message if @whiny + end + end + end + + def interpolate pattern, style_name = default_style #:nodoc: + Paperclip::Interpolations.interpolate(pattern, self, style_name) + end + + def queue_existing_for_delete #:nodoc: + return unless file? + @queued_for_delete += [:original, *styles.keys].uniq.map do |style| + path(style) if exists?(style) + end.compact + instance_write(:file_name, nil) + instance_write(:content_type, nil) + instance_write(:file_size, nil) + instance_write(:updated_at, nil) + end + + def flush_errors #:nodoc: + @errors.each do |error, message| + [message].flatten.each {|m| instance.errors.add(name, m) } + end + end + + end +end + diff --git a/online/vendor/plugins/paperclip/lib/paperclip/callback_compatability.rb b/online/vendor/plugins/paperclip/lib/paperclip/callback_compatability.rb new file mode 100644 index 0000000..10b08fc --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/callback_compatability.rb @@ -0,0 +1,33 @@ +module Paperclip + # This module is intended as a compatability shim for the differences in + # callbacks between Rails 2.0 and Rails 2.1. + module CallbackCompatability + def self.included(base) + base.extend(ClassMethods) + base.send(:include, InstanceMethods) + end + + module ClassMethods + # The implementation of this method is taken from the Rails 1.2.6 source, + # from rails/activerecord/lib/active_record/callbacks.rb, line 192. + def define_callbacks(*args) + args.each do |method| + self.class_eval <<-"end_eval" + def self.#{method}(*callbacks, &block) + callbacks << block if block_given? + write_inheritable_array(#{method.to_sym.inspect}, callbacks) + end + end_eval + end + end + end + + module InstanceMethods + # The callbacks in < 2.1 don't worry about the extra options or the + # block, so just run what we have available. + def run_callbacks(meth, opts = nil, &blk) + callback(meth) + end + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/geometry.rb b/online/vendor/plugins/paperclip/lib/paperclip/geometry.rb new file mode 100644 index 0000000..5554bd5 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/geometry.rb @@ -0,0 +1,115 @@ +module Paperclip + + # Defines the geometry of an image. + class Geometry + attr_accessor :height, :width, :modifier + + # Gives a Geometry representing the given height and width + def initialize width = nil, height = nil, modifier = nil + @height = height.to_f + @width = width.to_f + @modifier = modifier + end + + # Uses ImageMagick to determing the dimensions of a file, passed in as either a + # File or path. + def self.from_file file + file = file.path if file.respond_to? "path" + geometry = begin + Paperclip.run("identify", %Q[-format "%wx%h" "#{file}"[0]]) + rescue PaperclipCommandLineError + "" + end + parse(geometry) || + raise(NotIdentifiedByImageMagickError.new("#{file} is not recognized by the 'identify' command.")) + end + + # Parses a "WxH" formatted string, where W is the width and H is the height. + def self.parse string + if match = (string && string.match(/\b(\d*)x?(\d*)\b([\>\<\#\@\%^!])?/i)) + Geometry.new(*match[1,3]) + end + end + + # True if the dimensions represent a square + def square? + height == width + end + + # True if the dimensions represent a horizontal rectangle + def horizontal? + height < width + end + + # True if the dimensions represent a vertical rectangle + def vertical? + height > width + end + + # The aspect ratio of the dimensions. + def aspect + width / height + end + + # Returns the larger of the two dimensions + def larger + [height, width].max + end + + # Returns the smaller of the two dimensions + def smaller + [height, width].min + end + + # Returns the width and height in a format suitable to be passed to Geometry.parse + def to_s + s = "" + s << width.to_i.to_s if width > 0 + s << "x#{height.to_i}" if height > 0 + s << modifier.to_s + s + end + + # Same as to_s + def inspect + to_s + end + + # Returns the scaling and cropping geometries (in string-based ImageMagick format) + # neccessary to transform this Geometry into the Geometry given. If crop is true, + # then it is assumed the destination Geometry will be the exact final resolution. + # In this case, the source Geometry is scaled so that an image containing the + # destination Geometry would be completely filled by the source image, and any + # overhanging image would be cropped. Useful for square thumbnail images. The cropping + # is weighted at the center of the Geometry. + def transformation_to dst, crop = false + if crop + ratio = Geometry.new( dst.width / self.width, dst.height / self.height ) + scale_geometry, scale = scaling(dst, ratio) + crop_geometry = cropping(dst, ratio, scale) + else + scale_geometry = dst.to_s + end + + [ scale_geometry, crop_geometry ] + end + + private + + def scaling dst, ratio + if ratio.horizontal? || ratio.square? + [ "%dx" % dst.width, ratio.width ] + else + [ "x%d" % dst.height, ratio.height ] + end + end + + def cropping dst, ratio, scale + if ratio.horizontal? || ratio.square? + "%dx%d+%d+%d" % [ dst.width, dst.height, 0, (self.height * scale - dst.height) / 2 ] + else + "%dx%d+%d+%d" % [ dst.width, dst.height, (self.width * scale - dst.width) / 2, 0 ] + end + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/interpolations.rb b/online/vendor/plugins/paperclip/lib/paperclip/interpolations.rb new file mode 100644 index 0000000..fa2c480 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/interpolations.rb @@ -0,0 +1,108 @@ +module Paperclip + # This module contains all the methods that are available for interpolation + # in paths and urls. To add your own (or override an existing one), you + # can either open this module and define it, or call the + # Paperclip.interpolates method. + module Interpolations + extend self + + # Hash assignment of interpolations. Included only for compatability, + # and is not intended for normal use. + def self.[]= name, block + define_method(name, &block) + end + + # Hash access of interpolations. Included only for compatability, + # and is not intended for normal use. + def self.[] name + method(name) + end + + # Returns a sorted list of all interpolations. + def self.all + self.instance_methods(false).sort + end + + # Perform the actual interpolation. Takes the pattern to interpolate + # and the arguments to pass, which are the attachment and style name. + def self.interpolate pattern, *args + all.reverse.inject( pattern.dup ) do |result, tag| + result.gsub(/:#{tag}/) do |match| + send( tag, *args ) + end + end + end + + # Returns the filename, the same way as ":basename.:extension" would. + def filename attachment, style_name + "#{basename(attachment, style_name)}.#{extension(attachment, style_name)}" + end + + # Returns the interpolated URL. Will raise an error if the url itself + # contains ":url" to prevent infinite recursion. This interpolation + # is used in the default :path to ease default specifications. + def url attachment, style_name + raise InfiniteInterpolationError if attachment.options[:url].include?(":url") + attachment.url(style_name, false) + end + + # Returns the timestamp as defined by the _updated_at field + def timestamp attachment, style_name + attachment.instance_read(:updated_at).to_s + end + + # Returns the RAILS_ROOT constant. + def rails_root attachment, style_name + RAILS_ROOT + end + + # Returns the RAILS_ENV constant. + def rails_env attachment, style_name + RAILS_ENV + end + + # Returns the underscored, pluralized version of the class name. + # e.g. "users" for the User class. + # NOTE: The arguments need to be optional, because some tools fetch + # all class names. Calling #class will return the expected class. + def class attachment = nil, style_name = nil + return super() if attachment.nil? && style_name.nil? + attachment.instance.class.to_s.underscore.pluralize + end + + # Returns the basename of the file. e.g. "file" for "file.jpg" + def basename attachment, style_name + attachment.original_filename.gsub(/#{File.extname(attachment.original_filename)}$/, "") + end + + # Returns the extension of the file. e.g. "jpg" for "file.jpg" + # If the style has a format defined, it will return the format instead + # of the actual extension. + def extension attachment, style_name + ((style = attachment.styles[style_name]) && style[:format]) || + File.extname(attachment.original_filename).gsub(/^\.+/, "") + end + + # Returns the id of the instance. + def id attachment, style_name + attachment.instance.id + end + + # Returns the id of the instance in a split path form. e.g. returns + # 000/001/234 for an id of 1234. + def id_partition attachment, style_name + ("%09d" % attachment.instance.id).scan(/\d{3}/).join("/") + end + + # Returns the pluralized form of the attachment name. e.g. + # "avatars" for an attachment of :avatar + def attachment attachment, style_name + attachment.name.to_s.downcase.pluralize + end + + # Returns the style, or the default style if nil is supplied. + def style attachment, style_name + style_name || attachment.default_style + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/iostream.rb b/online/vendor/plugins/paperclip/lib/paperclip/iostream.rb new file mode 100644 index 0000000..11779aa --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/iostream.rb @@ -0,0 +1,59 @@ +# Provides method that can be included on File-type objects (IO, StringIO, Tempfile, etc) to allow stream copying +# and Tempfile conversion. +module IOStream + + # Returns a Tempfile containing the contents of the readable object. + def to_tempfile + name = respond_to?(:original_filename) ? original_filename : (respond_to?(:path) ? path : "stream") + tempfile = Paperclip::Tempfile.new(File.basename(name)) + tempfile.binmode + self.stream_to(tempfile) + end + + # Copies one read-able object from one place to another in blocks, obviating the need to load + # the whole thing into memory. Defaults to 8k blocks. If this module is included in both + # StringIO and Tempfile, then either can have its data copied anywhere else without typing + # worries or memory overhead worries. Returns a File if a String is passed in as the destination + # and returns the IO or Tempfile as passed in if one is sent as the destination. + def stream_to path_or_file, in_blocks_of = 8192 + dstio = case path_or_file + when String then File.new(path_or_file, "wb+") + when IO then path_or_file + when Tempfile then path_or_file + end + buffer = "" + self.rewind + while self.read(in_blocks_of, buffer) do + dstio.write(buffer) + end + dstio.rewind + dstio + end +end + +class IO #:nodoc: + include IOStream +end + +%w( Tempfile StringIO ).each do |klass| + if Object.const_defined? klass + Object.const_get(klass).class_eval do + include IOStream + end + end +end + +# Corrects a bug in Windows when asking for Tempfile size. +if defined? Tempfile + class Tempfile + def size + if @tmpfile + @tmpfile.fsync + @tmpfile.flush + @tmpfile.stat.size + else + 0 + end + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/matchers.rb b/online/vendor/plugins/paperclip/lib/paperclip/matchers.rb new file mode 100644 index 0000000..bac4221 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/matchers.rb @@ -0,0 +1,33 @@ +require 'paperclip/matchers/have_attached_file_matcher' +require 'paperclip/matchers/validate_attachment_presence_matcher' +require 'paperclip/matchers/validate_attachment_content_type_matcher' +require 'paperclip/matchers/validate_attachment_size_matcher' + +module Paperclip + module Shoulda + # Provides rspec-compatible matchers for testing Paperclip attachments. + # + # In spec_helper.rb, you'll need to require the matchers: + # + # require "paperclip/matchers" + # + # And include the module: + # + # Spec::Runner.configure do |config| + # config.include Paperclip::Shoulda::Matchers + # end + # + # Example: + # describe User do + # it { should have_attached_file(:avatar) } + # it { should validate_attachment_presence(:avatar) } + # it { should validate_attachment_content_type(:avatar). + # allowing('image/png', 'image/gif'). + # rejecting('text/plain', 'text/xml') } + # it { should validate_attachment_size(:avatar). + # less_than(2.megabytes) } + # end + module Matchers + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/matchers/have_attached_file_matcher.rb b/online/vendor/plugins/paperclip/lib/paperclip/matchers/have_attached_file_matcher.rb new file mode 100644 index 0000000..d3c1957 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/matchers/have_attached_file_matcher.rb @@ -0,0 +1,57 @@ +module Paperclip + module Shoulda + module Matchers + # Ensures that the given instance or class has an attachment with the + # given name. + # + # Example: + # describe User do + # it { should have_attached_file(:avatar) } + # end + def have_attached_file name + HaveAttachedFileMatcher.new(name) + end + + class HaveAttachedFileMatcher + def initialize attachment_name + @attachment_name = attachment_name + end + + def matches? subject + @subject = subject + @subject = @subject.class unless Class === @subject + responds? && has_column? && included? + end + + def failure_message + "Should have an attachment named #{@attachment_name}" + end + + def negative_failure_message + "Should not have an attachment named #{@attachment_name}" + end + + def description + "have an attachment named #{@attachment_name}" + end + + protected + + def responds? + methods = @subject.instance_methods.map(&:to_s) + methods.include?("#{@attachment_name}") && + methods.include?("#{@attachment_name}=") && + methods.include?("#{@attachment_name}?") + end + + def has_column? + @subject.column_names.include?("#{@attachment_name}_file_name") + end + + def included? + @subject.ancestors.include?(Paperclip::InstanceMethods) + end + end + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb b/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb new file mode 100644 index 0000000..4310e5f --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb @@ -0,0 +1,75 @@ +module Paperclip + module Shoulda + module Matchers + # Ensures that the given instance or class validates the content type of + # the given attachment as specified. + # + # Example: + # describe User do + # it { should validate_attachment_content_type(:icon). + # allowing('image/png', 'image/gif'). + # rejecting('text/plain', 'text/xml') } + # end + def validate_attachment_content_type name + ValidateAttachmentContentTypeMatcher.new(name) + end + + class ValidateAttachmentContentTypeMatcher + def initialize attachment_name + @attachment_name = attachment_name + end + + def allowing *types + @allowed_types = types.flatten + self + end + + def rejecting *types + @rejected_types = types.flatten + self + end + + def matches? subject + @subject = subject + @subject = @subject.class unless Class === @subject + @allowed_types && @rejected_types && + allowed_types_allowed? && rejected_types_rejected? + end + + def failure_message + "Content types #{@allowed_types.join(", ")} should be accepted" + + " and #{@rejected_types.join(", ")} rejected by #{@attachment_name}" + end + + def negative_failure_message + "Content types #{@allowed_types.join(", ")} should be rejected" + + " and #{@rejected_types.join(", ")} accepted by #{@attachment_name}" + end + + def description + "validate the content types allowed on attachment #{@attachment_name}" + end + + protected + + def allow_types?(types) + types.all? do |type| + file = StringIO.new(".") + file.content_type = type + (subject = @subject.new).attachment_for(@attachment_name).assign(file) + subject.valid? && subject.errors.on(:"#{@attachment_name}_content_type").blank? + end + end + + def allowed_types_allowed? + allow_types?(@allowed_types) + end + + def rejected_types_rejected? + not allow_types?(@rejected_types) + end + end + end + end +end + diff --git a/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_presence_matcher.rb b/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_presence_matcher.rb new file mode 100644 index 0000000..5e4cfd4 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_presence_matcher.rb @@ -0,0 +1,55 @@ +module Paperclip + module Shoulda + module Matchers + # Ensures that the given instance or class validates the presence of the + # given attachment. + # + # describe User do + # it { should validate_attachment_presence(:avatar) } + # end + def validate_attachment_presence name + ValidateAttachmentPresenceMatcher.new(name) + end + + class ValidateAttachmentPresenceMatcher + def initialize attachment_name + @attachment_name = attachment_name + end + + def matches? subject + @subject = subject + @subject = @subject.class unless Class === @subject + error_when_not_valid? && no_error_when_valid? + end + + def failure_message + "Attachment #{@attachment_name} should be required" + end + + def negative_failure_message + "Attachment #{@attachment_name} should not be required" + end + + def description + "require presence of attachment #{@attachment_name}" + end + + protected + + def error_when_not_valid? + (subject = @subject.new).send(@attachment_name).assign(nil) + subject.valid? + not subject.errors.on(:"#{@attachment_name}_file_name").blank? + end + + def no_error_when_valid? + @file = StringIO.new(".") + (subject = @subject.new).send(@attachment_name).assign(@file) + subject.valid? + subject.errors.on(:"#{@attachment_name}_file_name").blank? + end + end + end + end +end + diff --git a/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_size_matcher.rb b/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_size_matcher.rb new file mode 100644 index 0000000..d4181b9 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_size_matcher.rb @@ -0,0 +1,96 @@ +module Paperclip + module Shoulda + module Matchers + # Ensures that the given instance or class validates the size of the + # given attachment as specified. + # + # Examples: + # it { should validate_attachment_size(:avatar). + # less_than(2.megabytes) } + # it { should validate_attachment_size(:icon). + # greater_than(1024) } + # it { should validate_attachment_size(:icon). + # in(0..100) } + def validate_attachment_size name + ValidateAttachmentSizeMatcher.new(name) + end + + class ValidateAttachmentSizeMatcher + def initialize attachment_name + @attachment_name = attachment_name + @low, @high = 0, (1.0/0) + end + + def less_than size + @high = size + self + end + + def greater_than size + @low = size + self + end + + def in range + @low, @high = range.first, range.last + self + end + + def matches? subject + @subject = subject + @subject = @subject.class unless Class === @subject + lower_than_low? && higher_than_low? && lower_than_high? && higher_than_high? + end + + def failure_message + "Attachment #{@attachment_name} must be between #{@low} and #{@high} bytes" + end + + def negative_failure_message + "Attachment #{@attachment_name} cannot be between #{@low} and #{@high} bytes" + end + + def description + "validate the size of attachment #{@attachment_name}" + end + + protected + + def override_method object, method, &replacement + (class << object; self; end).class_eval do + define_method(method, &replacement) + end + end + + def passes_validation_with_size(new_size) + file = StringIO.new(".") + override_method(file, :size){ new_size } + override_method(file, :to_tempfile){ file } + + (subject = @subject.new).send(@attachment_name).assign(file) + subject.valid? + subject.errors.on(:"#{@attachment_name}_file_size").blank? + end + + def lower_than_low? + not passes_validation_with_size(@low - 1) + end + + def higher_than_low? + passes_validation_with_size(@low + 1) + end + + def lower_than_high? + return true if @high == (1.0/0) + passes_validation_with_size(@high - 1) + end + + def higher_than_high? + return true if @high == (1.0/0) + not passes_validation_with_size(@high + 1) + end + end + end + end +end + diff --git a/online/vendor/plugins/paperclip/lib/paperclip/processor.rb b/online/vendor/plugins/paperclip/lib/paperclip/processor.rb new file mode 100644 index 0000000..c553b91 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/processor.rb @@ -0,0 +1,49 @@ +module Paperclip + # Paperclip processors allow you to modify attached files when they are + # attached in any way you are able. Paperclip itself uses command-line + # programs for its included Thumbnail processor, but custom processors + # are not required to follow suit. + # + # Processors are required to be defined inside the Paperclip module and + # are also required to be a subclass of Paperclip::Processor. There is + # only one method you *must* implement to properly be a subclass: + # #make, but #initialize may also be of use. Both methods accept 3 + # arguments: the file that will be operated on (which is an instance of + # File), a hash of options that were defined in has_attached_file's + # style hash, and the Paperclip::Attachment itself. + # + # All #make needs to return is an instance of File (Tempfile is + # acceptable) which contains the results of the processing. + # + # See Paperclip.run for more information about using command-line + # utilities from within Processors. + class Processor + attr_accessor :file, :options, :attachment + + def initialize file, options = {}, attachment = nil + @file = file + @options = options + @attachment = attachment + end + + def make + end + + def self.make file, options = {}, attachment = nil + new(file, options, attachment).make + end + end + + # Due to how ImageMagick handles its image format conversion and how Tempfile + # handles its naming scheme, it is necessary to override how Tempfile makes + # its names so as to allow for file extensions. Idea taken from the comments + # on this blog post: + # http://marsorange.com/archives/of-mogrify-ruby-tempfile-dynamic-class-definitions + class Tempfile < ::Tempfile + # Replaces Tempfile's +make_tmpname+ with one that honors file extensions. + def make_tmpname(basename, n) + extension = File.extname(basename) + sprintf("%s,%d,%d%s", File.basename(basename, extension), $$, n, extension) + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/storage.rb b/online/vendor/plugins/paperclip/lib/paperclip/storage.rb new file mode 100644 index 0000000..c12c274 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/storage.rb @@ -0,0 +1,247 @@ +module Paperclip + module Storage + + # The default place to store attachments is in the filesystem. Files on the local + # filesystem can be very easily served by Apache without requiring a hit to your app. + # They also can be processed more easily after they've been saved, as they're just + # normal files. There is one Filesystem-specific option for has_attached_file. + # * +path+: The location of the repository of attachments on disk. This can (and, in + # almost all cases, should) be coordinated with the value of the +url+ option to + # allow files to be saved into a place where Apache can serve them without + # hitting your app. Defaults to + # ":rails_root/public/:attachment/:id/:style/:basename.:extension" + # By default this places the files in the app's public directory which can be served + # directly. If you are using capistrano for deployment, a good idea would be to + # make a symlink to the capistrano-created system directory from inside your app's + # public directory. + # See Paperclip::Attachment#interpolate for more information on variable interpolaton. + # :path => "/var/app/attachments/:class/:id/:style/:basename.:extension" + module Filesystem + def self.extended base + end + + def exists?(style_name = default_style) + if original_filename + File.exist?(path(style_name)) + else + false + end + end + + # Returns representation of the data of the file assigned to the given + # style, in the format most representative of the current storage. + def to_file style_name = default_style + @queued_for_write[style_name] || (File.new(path(style_name), 'rb') if exists?(style_name)) + end + + def flush_writes #:nodoc: + @queued_for_write.each do |style_name, file| + file.close + FileUtils.mkdir_p(File.dirname(path(style_name))) + log("saving #{path(style_name)}") + FileUtils.mv(file.path, path(style_name)) + FileUtils.chmod(0644, path(style_name)) + end + @queued_for_write = {} + end + + def flush_deletes #:nodoc: + @queued_for_delete.each do |path| + begin + log("deleting #{path}") + FileUtils.rm(path) if File.exist?(path) + rescue Errno::ENOENT => e + # ignore file-not-found, let everything else pass + end + begin + while(true) + path = File.dirname(path) + FileUtils.rmdir(path) + end + rescue Errno::EEXIST, Errno::ENOTEMPTY, Errno::ENOENT, Errno::EINVAL, Errno::ENOTDIR + # Stop trying to remove parent directories + rescue SystemCallError => e + log("There was an unexpected error while deleting directories: #{e.class}") + # Ignore it + end + end + @queued_for_delete = [] + end + end + + # Amazon's S3 file hosting service is a scalable, easy place to store files for + # distribution. You can find out more about it at http://aws.amazon.com/s3 + # There are a few S3-specific options for has_attached_file: + # * +s3_credentials+: Takes a path, a File, or a Hash. The path (or File) must point + # to a YAML file containing the +access_key_id+ and +secret_access_key+ that Amazon + # gives you. You can 'environment-space' this just like you do to your + # database.yml file, so different environments can use different accounts: + # development: + # access_key_id: 123... + # secret_access_key: 123... + # test: + # access_key_id: abc... + # secret_access_key: abc... + # production: + # access_key_id: 456... + # secret_access_key: 456... + # This is not required, however, and the file may simply look like this: + # access_key_id: 456... + # secret_access_key: 456... + # In which case, those access keys will be used in all environments. You can also + # put your bucket name in this file, instead of adding it to the code directly. + # This is useful when you want the same account but a different bucket for + # development versus production. + # * +s3_permissions+: This is a String that should be one of the "canned" access + # policies that S3 provides (more information can be found here: + # http://docs.amazonwebservices.com/AmazonS3/2006-03-01/RESTAccessPolicy.html#RESTCannedAccessPolicies) + # The default for Paperclip is :public_read. + # * +s3_protocol+: The protocol for the URLs generated to your S3 assets. Can be either + # 'http' or 'https'. Defaults to 'http' when your :s3_permissions are :public_read (the + # default), and 'https' when your :s3_permissions are anything else. + # * +s3_headers+: A hash of headers such as {'Expires' => 1.year.from_now.httpdate} + # * +bucket+: This is the name of the S3 bucket that will store your files. Remember + # that the bucket must be unique across all of Amazon S3. If the bucket does not exist + # Paperclip will attempt to create it. The bucket name will not be interpolated. + # You can define the bucket as a Proc if you want to determine it's name at runtime. + # Paperclip will call that Proc with attachment as the only argument. + # * +s3_host_alias+: The fully-qualified domain name (FQDN) that is the alias to the + # S3 domain of your bucket. Used with the :s3_alias_url url interpolation. See the + # link in the +url+ entry for more information about S3 domains and buckets. + # * +url+: There are three options for the S3 url. You can choose to have the bucket's name + # placed domain-style (bucket.s3.amazonaws.com) or path-style (s3.amazonaws.com/bucket). + # Lastly, you can specify a CNAME (which requires the CNAME to be specified as + # :s3_alias_url. You can read more about CNAMEs and S3 at + # http://docs.amazonwebservices.com/AmazonS3/latest/index.html?VirtualHosting.html + # Normally, this won't matter in the slightest and you can leave the default (which is + # path-style, or :s3_path_url). But in some cases paths don't work and you need to use + # the domain-style (:s3_domain_url). Anything else here will be treated like path-style. + # NOTE: If you use a CNAME for use with CloudFront, you can NOT specify https as your + # :s3_protocol; This is *not supported* by S3/CloudFront. Finally, when using the host + # alias, the :bucket parameter is ignored, as the hostname is used as the bucket name + # by S3. + # * +path+: This is the key under the bucket in which the file will be stored. The + # URL will be constructed from the bucket and the path. This is what you will want + # to interpolate. Keys should be unique, like filenames, and despite the fact that + # S3 (strictly speaking) does not support directories, you can still use a / to + # separate parts of your file name. + module S3 + def self.extended base + begin + require 'aws/s3' + rescue LoadError => e + e.message << " (You may need to install the aws-s3 gem)" + raise e + end + + base.instance_eval do + @s3_credentials = parse_credentials(@options[:s3_credentials]) + @bucket = @options[:bucket] || @s3_credentials[:bucket] + @bucket = @bucket.call(self) if @bucket.is_a?(Proc) + @s3_options = @options[:s3_options] || {} + @s3_permissions = @options[:s3_permissions] || :public_read + @s3_protocol = @options[:s3_protocol] || (@s3_permissions == :public_read ? 'http' : 'https') + @s3_headers = @options[:s3_headers] || {} + @s3_host_alias = @options[:s3_host_alias] + @url = ":s3_path_url" unless @url.to_s.match(/^:s3.*url$/) + AWS::S3::Base.establish_connection!( @s3_options.merge( + :access_key_id => @s3_credentials[:access_key_id], + :secret_access_key => @s3_credentials[:secret_access_key] + )) + end + Paperclip.interpolates(:s3_alias_url) do |attachment, style| + "#{attachment.s3_protocol}://#{attachment.s3_host_alias}/#{attachment.path(style).gsub(%r{^/}, "")}" + end + Paperclip.interpolates(:s3_path_url) do |attachment, style| + "#{attachment.s3_protocol}://s3.amazonaws.com/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}" + end + Paperclip.interpolates(:s3_domain_url) do |attachment, style| + "#{attachment.s3_protocol}://#{attachment.bucket_name}.s3.amazonaws.com/#{attachment.path(style).gsub(%r{^/}, "")}" + end + end + + def expiring_url(time = 3600) + AWS::S3::S3Object.url_for(path, bucket_name, :expires_in => time ) + end + + def bucket_name + @bucket + end + + def s3_host_alias + @s3_host_alias + end + + def parse_credentials creds + creds = find_credentials(creds).stringify_keys + (creds[RAILS_ENV] || creds).symbolize_keys + end + + def exists?(style = default_style) + if original_filename + AWS::S3::S3Object.exists?(path(style), bucket_name) + else + false + end + end + + def s3_protocol + @s3_protocol + end + + # Returns representation of the data of the file assigned to the given + # style, in the format most representative of the current storage. + def to_file style = default_style + return @queued_for_write[style] if @queued_for_write[style] + file = Tempfile.new(path(style)) + file.write(AWS::S3::S3Object.value(path(style), bucket_name)) + file.rewind + return file + end + + def flush_writes #:nodoc: + @queued_for_write.each do |style, file| + begin + log("saving #{path(style)}") + AWS::S3::S3Object.store(path(style), + file, + bucket_name, + {:content_type => instance_read(:content_type), + :access => @s3_permissions, + }.merge(@s3_headers)) + rescue AWS::S3::ResponseError => e + raise + end + end + @queued_for_write = {} + end + + def flush_deletes #:nodoc: + @queued_for_delete.each do |path| + begin + log("deleting #{path}") + AWS::S3::S3Object.delete(path, bucket_name) + rescue AWS::S3::ResponseError + # Ignore this. + end + end + @queued_for_delete = [] + end + + def find_credentials creds + case creds + when File + YAML::load(ERB.new(File.read(creds.path)).result) + when String + YAML::load(ERB.new(File.read(creds)).result) + when Hash + creds + else + raise ArgumentError, "Credentials are not a path, file, or hash." + end + end + private :find_credentials + + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/style.rb b/online/vendor/plugins/paperclip/lib/paperclip/style.rb new file mode 100644 index 0000000..4d8d724 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/style.rb @@ -0,0 +1,90 @@ +# encoding: utf-8 +module Paperclip + # The Style class holds the definition of a thumbnail style, applying + # whatever processing is required to normalize the definition and delaying + # the evaluation of block parameters until useful context is available. + + class Style + + attr_reader :name, :attachment, :format + + # Creates a Style object. +name+ is the name of the attachment, + # +definition+ is the style definition from has_attached_file, which + # can be string, array or hash + def initialize name, definition, attachment + @name = name + @attachment = attachment + if definition.is_a? Hash + @geometry = definition.delete(:geometry) + @format = definition.delete(:format) + @processors = definition.delete(:processors) + @other_args = definition + else + @geometry, @format = [definition, nil].flatten[0..1] + @other_args = {} + end + @format = nil if @format.blank? + end + + # retrieves from the attachment the processors defined in the has_attached_file call + # (which method (in the attachment) will call any supplied procs) + # There is an important change of interface here: a style rule can set its own processors + # by default we behave as before, though. + def processors + @processors || attachment.processors + end + + # retrieves from the attachment the whiny setting + def whiny + attachment.whiny + end + + # returns true if we're inclined to grumble + def whiny? + !!whiny + end + + def convert_options + attachment.send(:extra_options_for, name) + end + + # returns the geometry string for this style + # if a proc has been supplied, we call it here + def geometry + @geometry.respond_to?(:call) ? @geometry.call(attachment.instance) : @geometry + end + + # Supplies the hash of options that processors expect to receive as their second argument + # Arguments other than the standard geometry, format etc are just passed through from + # initialization and any procs are called here, just before post-processing. + def processor_options + args = {} + @other_args.each do |k,v| + args[k] = v.respond_to?(:call) ? v.call(attachment) : v + end + [:processors, :geometry, :format, :whiny, :convert_options].each do |k| + (arg = send(k)) && args[k] = arg + end + args + end + + # Supports getting and setting style properties with hash notation to ensure backwards-compatibility + # eg. @attachment.styles[:large][:geometry]@ will still work + def [](key) + if [:name, :convert_options, :whiny, :processors, :geometry, :format].include?(key) + send(key) + elsif defined? @other_args[key] + @other_args[key] + end + end + + def []=(key, value) + if [:name, :convert_options, :whiny, :processors, :geometry, :format].include?(key) + send("#{key}=".intern, value) + else + @other_args[key] = value + end + end + + end +end \ No newline at end of file diff --git a/online/vendor/plugins/paperclip/lib/paperclip/thumbnail.rb b/online/vendor/plugins/paperclip/lib/paperclip/thumbnail.rb new file mode 100644 index 0000000..2068620 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/thumbnail.rb @@ -0,0 +1,75 @@ +module Paperclip + # Handles thumbnailing images that are uploaded. + class Thumbnail < Processor + + attr_accessor :current_geometry, :target_geometry, :format, :whiny, :convert_options, :source_file_options + + # Creates a Thumbnail object set to work on the +file+ given. It + # will attempt to transform the image into one defined by +target_geometry+ + # which is a "WxH"-style string. +format+ will be inferred from the +file+ + # unless specified. Thumbnail creation will raise no errors unless + # +whiny+ is true (which it is, by default. If +convert_options+ is + # set, the options will be appended to the convert command upon image conversion + def initialize file, options = {}, attachment = nil + super + + geometry = options[:geometry] + @file = file + @crop = geometry[-1,1] == '#' + @target_geometry = Geometry.parse geometry + @current_geometry = Geometry.from_file @file + @source_file_options = options[:source_file_options] + @convert_options = options[:convert_options] + @whiny = options[:whiny].nil? ? true : options[:whiny] + @format = options[:format] + + @current_format = File.extname(@file.path) + @basename = File.basename(@file.path, @current_format) + + end + + # Returns true if the +target_geometry+ is meant to crop. + def crop? + @crop + end + + # Returns true if the image is meant to make use of additional convert options. + def convert_options? + !@convert_options.nil? && !@convert_options.empty? + end + + # Performs the conversion of the +file+ into a thumbnail. Returns the Tempfile + # that contains the new image. + def make + src = @file + dst = Tempfile.new([@basename, @format].compact.join(".")) + dst.binmode + + command = <<-end_command + #{ source_file_options } + "#{ File.expand_path(src.path) }[0]" + #{ transformation_command } + "#{ File.expand_path(dst.path) }" + end_command + + begin + success = Paperclip.run("convert", command.gsub(/\s+/, " ")) + rescue PaperclipCommandLineError + raise PaperclipError, "There was an error processing the thumbnail for #{@basename}" if @whiny + end + + dst + end + + # Returns the command ImageMagick's +convert+ needs to transform the image + # into the thumbnail. + def transformation_command + scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) + trans = "" + trans << " -resize \"#{scale}\"" unless scale.nil? || scale.empty? + trans << " -crop \"#{crop}\" +repage" if crop + trans << " #{convert_options}" if convert_options? + trans + end + end +end diff --git a/online/vendor/plugins/paperclip/lib/paperclip/upfile.rb b/online/vendor/plugins/paperclip/lib/paperclip/upfile.rb new file mode 100644 index 0000000..14d40f2 --- /dev/null +++ b/online/vendor/plugins/paperclip/lib/paperclip/upfile.rb @@ -0,0 +1,50 @@ +module Paperclip + # The Upfile module is a convenience module for adding uploaded-file-type methods + # to the +File+ class. Useful for testing. + # user.avatar = File.new("test/test_avatar.jpg") + module Upfile + + # Infer the MIME-type of the file from the extension. + def content_type + type = (self.path.match(/\.(\w+)$/)[1] rescue "octet-stream").downcase + case type + when %r"jp(e|g|eg)" then "image/jpeg" + when %r"tiff?" then "image/tiff" + when %r"png", "gif", "bmp" then "image/#{type}" + when "txt" then "text/plain" + when %r"html?" then "text/html" + when "js" then "application/js" + when "csv", "xml", "css" then "text/#{type}" + else + Paperclip.run("file", "--mime-type #{self.path}").split(':').last.strip rescue "application/x-#{type}" + end + end + + # Returns the file's normal name. + def original_filename + File.basename(self.path) + end + + # Returns the size of the file. + def size + File.size(self) + end + end +end + +if defined? StringIO + class StringIO + attr_accessor :original_filename, :content_type + def original_filename + @original_filename ||= "stringio.txt" + end + def content_type + @content_type ||= "text/plain" + end + end +end + +class File #:nodoc: + include Paperclip::Upfile +end + diff --git a/online/vendor/plugins/paperclip/paperclip.gemspec b/online/vendor/plugins/paperclip/paperclip.gemspec new file mode 100644 index 0000000..26c49ed --- /dev/null +++ b/online/vendor/plugins/paperclip/paperclip.gemspec @@ -0,0 +1,48 @@ +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = %q{paperclip} + s.version = "2.3.1.1" + + s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= + s.authors = ["Jon Yurek"] + s.date = %q{2009-10-09} + s.email = %q{jyurek@thoughtbot.com} + s.extra_rdoc_files = ["README.rdoc"] + s.files = ["README.rdoc", "LICENSE", "Rakefile", "init.rb", "generators/paperclip", "generators/paperclip/paperclip_generator.rb", "generators/paperclip/templates", "generators/paperclip/templates/paperclip_migration.rb.erb", "generators/paperclip/USAGE", "lib/paperclip", "lib/paperclip/attachment.rb", "lib/paperclip/callback_compatability.rb", "lib/paperclip/geometry.rb", "lib/paperclip/interpolations.rb", "lib/paperclip/iostream.rb", "lib/paperclip/matchers", "lib/paperclip/matchers/have_attached_file_matcher.rb", "lib/paperclip/matchers/validate_attachment_content_type_matcher.rb", "lib/paperclip/matchers/validate_attachment_presence_matcher.rb", "lib/paperclip/matchers/validate_attachment_size_matcher.rb", "lib/paperclip/matchers.rb", "lib/paperclip/processor.rb", "lib/paperclip/storage.rb", "lib/paperclip/thumbnail.rb", "lib/paperclip/upfile.rb", "lib/paperclip.rb", "tasks/paperclip_tasks.rake", "test/attachment_test.rb", "test/database.yml", "test/fixtures", "test/fixtures/12k.png", "test/fixtures/50x50.png", "test/fixtures/5k.png", "test/fixtures/bad.png", "test/fixtures/s3.yml", "test/fixtures/text.txt", "test/fixtures/twopage.pdf", "test/geometry_test.rb", "test/helper.rb", "test/integration_test.rb", "test/interpolations_test.rb", "test/iostream_test.rb", "test/matchers", "test/matchers/have_attached_file_matcher_test.rb", "test/matchers/validate_attachment_content_type_matcher_test.rb", "test/matchers/validate_attachment_presence_matcher_test.rb", "test/matchers/validate_attachment_size_matcher_test.rb", "test/paperclip_test.rb", "test/processor_test.rb", "test/storage_test.rb", "test/thumbnail_test.rb", "test/upfile_test.rb", "shoulda_macros/paperclip.rb"] + s.homepage = %q{http://www.thoughtbot.com/projects/paperclip} + s.rdoc_options = ["--line-numbers", "--inline-source"] + s.require_paths = ["lib"] + s.requirements = ["ImageMagick"] + s.rubyforge_project = %q{paperclip} + s.rubygems_version = %q{1.3.5} + s.summary = %q{File attachments as attributes for ActiveRecord} + + if s.respond_to? :specification_version then + current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION + s.specification_version = 3 + + if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then + s.add_development_dependency(%q, [">= 0"]) + s.add_development_dependency(%q, ["= 0.9.5.0.1241126838"]) + s.add_development_dependency(%q, [">= 0"]) + s.add_development_dependency(%q, [">= 0"]) + s.add_development_dependency(%q, [">= 0"]) + s.add_development_dependency(%q, [">= 0"]) + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, ["= 0.9.5.0.1241126838"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, ["= 0.9.5.0.1241126838"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end +end diff --git a/online/vendor/plugins/paperclip/shoulda_macros/paperclip.rb b/online/vendor/plugins/paperclip/shoulda_macros/paperclip.rb new file mode 100644 index 0000000..50fed3a --- /dev/null +++ b/online/vendor/plugins/paperclip/shoulda_macros/paperclip.rb @@ -0,0 +1,117 @@ +require 'paperclip/matchers' +require 'action_controller' + +module Paperclip + # =Paperclip Shoulda Macros + # + # These macros are intended for use with shoulda, and will be included into + # your tests automatically. All of the macros use the standard shoulda + # assumption that the name of the test is based on the name of the model + # you're testing (that is, UserTest is the test for the User model), and + # will load that class for testing purposes. + module Shoulda + include Matchers + # This will test whether you have defined your attachment correctly by + # checking for all the required fields exist after the definition of the + # attachment. + def should_have_attached_file name + klass = self.name.gsub(/Test$/, '').constantize + matcher = have_attached_file name + should matcher.description do + assert_accepts(matcher, klass) + end + end + + # Tests for validations on the presence of the attachment. + def should_validate_attachment_presence name + klass = self.name.gsub(/Test$/, '').constantize + matcher = validate_attachment_presence name + should matcher.description do + assert_accepts(matcher, klass) + end + end + + # Tests that you have content_type validations specified. There are two + # options, :valid and :invalid. Both accept an array of strings. The + # strings should be a list of content types which will pass and fail + # validation, respectively. + def should_validate_attachment_content_type name, options = {} + klass = self.name.gsub(/Test$/, '').constantize + valid = [options[:valid]].flatten + invalid = [options[:invalid]].flatten + matcher = validate_attachment_content_type(name).allowing(valid).rejecting(invalid) + should matcher.description do + assert_accepts(matcher, klass) + end + end + + # Tests to ensure that you have file size validations turned on. You + # can pass the same options to this that you can to + # validate_attachment_file_size - :less_than, :greater_than, and :in. + # :less_than checks that a file is less than a certain size, :greater_than + # checks that a file is more than a certain size, and :in takes a Range or + # Array which specifies the lower and upper limits of the file size. + def should_validate_attachment_size name, options = {} + klass = self.name.gsub(/Test$/, '').constantize + min = options[:greater_than] || (options[:in] && options[:in].first) || 0 + max = options[:less_than] || (options[:in] && options[:in].last) || (1.0/0) + range = (min..max) + matcher = validate_attachment_size(name).in(range) + should matcher.description do + assert_accepts(matcher, klass) + end + end + + # Stubs the HTTP PUT for an attachment using S3 storage. + # + # @example + # stub_paperclip_s3('user', 'avatar', 'png') + def stub_paperclip_s3(model, attachment, extension) + definition = model.gsub(" ", "_").classify.constantize. + attachment_definitions[attachment.to_sym] + + path = "http://s3.amazonaws.com/:id/#{definition[:path]}" + path.gsub!(/:([^\/\.]+)/) do |match| + "([^\/\.]+)" + end + + begin + FakeWeb.register_uri(:put, Regexp.new(path), :body => "OK") + rescue NameError + raise NameError, "the stub_paperclip_s3 shoulda macro requires the fakeweb gem." + end + end + + # Stub S3 and return a file for attachment. Best with Factory Girl. + # Uses a strict directory convention: + # + # features/support/paperclip + # + # This method is used by the Paperclip-provided Cucumber step: + # + # When I attach a "demo_tape" "mp3" file to a "band" on S3 + # + # @example + # Factory.define :band_with_demo_tape, :parent => :band do |band| + # band.demo_tape { band.paperclip_fixture("band", "demo_tape", "png") } + # end + def paperclip_fixture(model, attachment, extension) + stub_paperclip_s3(model, attachment, extension) + base_path = File.join(File.dirname(__FILE__), "..", "..", + "features", "support", "paperclip") + File.new(File.join(base_path, model, "#{attachment}.#{extension}")) + end + end +end + +class ActionController::Integration::Session #:nodoc: + include Paperclip::Shoulda +end + +class Factory + include Paperclip::Shoulda #:nodoc: +end + +class Test::Unit::TestCase #:nodoc: + extend Paperclip::Shoulda +end diff --git a/online/vendor/plugins/paperclip/tasks/paperclip_tasks.rake b/online/vendor/plugins/paperclip/tasks/paperclip_tasks.rake new file mode 100644 index 0000000..23e4c11 --- /dev/null +++ b/online/vendor/plugins/paperclip/tasks/paperclip_tasks.rake @@ -0,0 +1,79 @@ +def obtain_class + class_name = ENV['CLASS'] || ENV['class'] + raise "Must specify CLASS" unless class_name + @klass = Object.const_get(class_name) +end + +def obtain_attachments + name = ENV['ATTACHMENT'] || ENV['attachment'] + raise "Class #{@klass.name} has no attachments specified" unless @klass.respond_to?(:attachment_definitions) + if !name.blank? && @klass.attachment_definitions.keys.include?(name) + [ name ] + else + @klass.attachment_definitions.keys + end +end + +def for_all_attachments + klass = obtain_class + names = obtain_attachments + ids = klass.connection.select_values(klass.send(:construct_finder_sql, :select => 'id')) + + ids.each do |id| + instance = klass.find(id) + names.each do |name| + result = if instance.send("#{ name }?") + yield(instance, name) + else + true + end + print result ? "." : "x"; $stdout.flush + end + end + puts " Done." +end + +namespace :paperclip do + desc "Refreshes both metadata and thumbnails." + task :refresh => ["paperclip:refresh:metadata", "paperclip:refresh:thumbnails"] + + namespace :refresh do + desc "Regenerates thumbnails for a given CLASS (and optional ATTACHMENT)." + task :thumbnails => :environment do + errors = [] + for_all_attachments do |instance, name| + result = instance.send(name).reprocess! + errors << [instance.id, instance.errors] unless instance.errors.blank? + result + end + errors.each{|e| puts "#{e.first}: #{e.last.full_messages.inspect}" } + end + + desc "Regenerates content_type/size metadata for a given CLASS (and optional ATTACHMENT)." + task :metadata => :environment do + for_all_attachments do |instance, name| + if file = instance.send(name).to_file + instance.send("#{name}_file_name=", instance.send("#{name}_file_name").strip) + instance.send("#{name}_content_type=", file.content_type.strip) + instance.send("#{name}_file_size=", file.size) if instance.respond_to?("#{name}_file_size") + instance.save(false) + else + true + end + end + end + end + + desc "Cleans out invalid attachments. Useful after you've added new validations." + task :clean => :environment do + for_all_attachments do |instance, name| + instance.send(name).send(:validate) + if instance.send(name).valid? + true + else + instance.send("#{name}=", nil) + instance.save + end + end + end +end diff --git a/online/vendor/plugins/paperclip/test/.gitignore b/online/vendor/plugins/paperclip/test/.gitignore new file mode 100644 index 0000000..b14c548 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/.gitignore @@ -0,0 +1 @@ +debug.log diff --git a/online/vendor/plugins/paperclip/test/attachment_test.rb b/online/vendor/plugins/paperclip/test/attachment_test.rb new file mode 100644 index 0000000..3f820a9 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/attachment_test.rb @@ -0,0 +1,764 @@ +# encoding: utf-8 +require 'test/helper' + +class Dummy + # This is a dummy class +end + +class AttachmentTest < Test::Unit::TestCase + should "return the path based on the url by default" do + @attachment = attachment :url => "/:class/:id/:basename" + @model = @attachment.instance + @model.id = 1234 + @model.avatar_file_name = "fake.jpg" + assert_equal "#{RAILS_ROOT}/public/fake_models/1234/fake", @attachment.path + end + + context "Attachment default_options" do + setup do + rebuild_model + @old_default_options = Paperclip::Attachment.default_options.dup + @new_default_options = @old_default_options.merge({ + :path => "argle/bargle", + :url => "fooferon", + :default_url => "not here.png" + }) + end + + teardown do + Paperclip::Attachment.default_options.merge! @old_default_options + end + + should "be overrideable" do + Paperclip::Attachment.default_options.merge!(@new_default_options) + @new_default_options.keys.each do |key| + assert_equal @new_default_options[key], + Paperclip::Attachment.default_options[key] + end + end + + context "without an Attachment" do + setup do + @dummy = Dummy.new + end + + should "return false when asked exists?" do + assert !@dummy.avatar.exists? + end + end + + context "on an Attachment" do + setup do + @dummy = Dummy.new + @attachment = @dummy.avatar + end + + Paperclip::Attachment.default_options.keys.each do |key| + should "be the default_options for #{key}" do + assert_equal @old_default_options[key], + @attachment.instance_variable_get("@#{key}"), + key + end + end + + context "when redefined" do + setup do + Paperclip::Attachment.default_options.merge!(@new_default_options) + @dummy = Dummy.new + @attachment = @dummy.avatar + end + + Paperclip::Attachment.default_options.keys.each do |key| + should "be the new default_options for #{key}" do + assert_equal @new_default_options[key], + @attachment.instance_variable_get("@#{key}"), + key + end + end + end + end + end + + context "An attachment with similarly named interpolations" do + setup do + rebuild_model :path => ":id.omg/:id-bbq/:idwhat/:id_partition.wtf" + @dummy = Dummy.new + @dummy.stubs(:id).returns(1024) + @file = File.new(File.join(File.dirname(__FILE__), + "fixtures", + "5k.png"), 'rb') + @dummy.avatar = @file + end + + teardown { @file.close } + + should "make sure that they are interpolated correctly" do + assert_equal "1024.omg/1024-bbq/1024what/000/001/024.wtf", @dummy.avatar.path + end + end + + context "An attachment with a :rails_env interpolation" do + setup do + @rails_env = "blah" + @id = 1024 + rebuild_model :path => ":rails_env/:id.png" + @dummy = Dummy.new + @dummy.stubs(:id).returns(@id) + @file = StringIO.new(".") + @dummy.avatar = @file + end + + should "return the proper path" do + temporary_rails_env(@rails_env) { + assert_equal "#{@rails_env}/#{@id}.png", @dummy.avatar.path + } + end + end + + context "An attachment with a default style and an extension interpolation" do + setup do + @attachment = attachment :path => ":basename.:extension", + :styles => { :default => ["100x100", :png] }, + :default_style => :default + @file = StringIO.new("...") + @file.stubs(:original_filename).returns("file.jpg") + end + should "return the right extension for the path" do + @attachment.assign(@file) + assert_equal "file.png", @attachment.path + end + end + + context "An attachment with :convert_options" do + setup do + rebuild_model :styles => { + :thumb => "100x100", + :large => "400x400" + }, + :convert_options => { + :all => "-do_stuff", + :thumb => "-thumbnailize" + } + @dummy = Dummy.new + @dummy.avatar + end + + should "report the correct options when sent #extra_options_for(:thumb)" do + assert_equal "-thumbnailize -do_stuff", @dummy.avatar.send(:extra_options_for, :thumb), @dummy.avatar.convert_options.inspect + end + + should "report the correct options when sent #extra_options_for(:large)" do + assert_equal "-do_stuff", @dummy.avatar.send(:extra_options_for, :large) + end + end + + context "An attachment with :convert_options that is a proc" do + setup do + rebuild_model :styles => { + :thumb => "100x100", + :large => "400x400" + }, + :convert_options => { + :all => lambda{|i| i.all }, + :thumb => lambda{|i| i.thumb } + } + Dummy.class_eval do + def all; "-all"; end + def thumb; "-thumb"; end + end + @dummy = Dummy.new + @dummy.avatar + end + + should "report the correct options when sent #extra_options_for(:thumb)" do + assert_equal "-thumb -all", @dummy.avatar.send(:extra_options_for, :thumb), @dummy.avatar.convert_options.inspect + end + + should "report the correct options when sent #extra_options_for(:large)" do + assert_equal "-all", @dummy.avatar.send(:extra_options_for, :large) + end + end + + context "An attachment with :path that is a proc" do + setup do + rebuild_model :path => lambda{ |attachment| "path/#{attachment.instance.other}.:extension" } + + @file = File.new(File.join(File.dirname(__FILE__), + "fixtures", + "5k.png"), 'rb') + @dummyA = Dummy.new(:other => 'a') + @dummyA.avatar = @file + @dummyB = Dummy.new(:other => 'b') + @dummyB.avatar = @file + end + + teardown { @file.close } + + should "return correct path" do + assert_equal "path/a.png", @dummyA.avatar.path + assert_equal "path/b.png", @dummyB.avatar.path + end + end + + context "An attachment with :styles that is a proc" do + setup do + rebuild_model :styles => lambda{ |attachment| {:thumb => "50x50#", :large => "400x400"} } + + @attachment = Dummy.new.avatar + end + + should "have the correct geometry" do + assert_equal "50x50#", @attachment.styles[:thumb][:geometry] + end + end + + context "An attachment with :url that is a proc" do + setup do + rebuild_model :url => lambda{ |attachment| "path/#{attachment.instance.other}.:extension" } + + @file = File.new(File.join(File.dirname(__FILE__), + "fixtures", + "5k.png"), 'rb') + @dummyA = Dummy.new(:other => 'a') + @dummyA.avatar = @file + @dummyB = Dummy.new(:other => 'b') + @dummyB.avatar = @file + end + + teardown { @file.close } + + should "return correct url" do + assert_equal "path/a.png", @dummyA.avatar.url(:original, false) + assert_equal "path/b.png", @dummyB.avatar.url(:original, false) + end + end + + geometry_specs = [ + [ lambda{|z| "50x50#" }, :png ], + lambda{|z| "50x50#" }, + { :geometry => lambda{|z| "50x50#" } } + ] + geometry_specs.each do |geometry_spec| + context "An attachment geometry like #{geometry_spec}" do + setup do + rebuild_model :styles => { :normal => geometry_spec } + @attachment = Dummy.new.avatar + end + + context "when assigned" do + setup do + @file = StringIO.new(".") + @attachment.assign(@file) + end + + should "have the correct geometry" do + assert_equal "50x50#", @attachment.styles[:normal][:geometry] + end + end + end + end + + context "An attachment with both 'normal' and hash-style styles" do + setup do + rebuild_model :styles => { + :normal => ["50x50#", :png], + :hash => { :geometry => "50x50#", :format => :png } + } + @dummy = Dummy.new + @attachment = @dummy.avatar + end + + [:processors, :whiny, :convert_options, :geometry, :format].each do |field| + should "have the same #{field} field" do + assert_equal @attachment.styles[:normal][field], @attachment.styles[:hash][field] + end + end + end + + context "An attachment with :processors that is a proc" do + setup do + rebuild_model :styles => { :normal => '' }, :processors => lambda { |a| [ :test ] } + @attachment = Dummy.new.avatar + end + + context "when assigned" do + setup do + @attachment.assign(StringIO.new(".")) + end + + should "have the correct processors" do + assert_equal [ :test ], @attachment.styles[:normal][:processors] + end + end + end + + context "An attachment with erroring processor" do + setup do + rebuild_model :processor => [:thumbnail], :styles => { :small => '' }, :whiny_thumbnails => true + @dummy = Dummy.new + Paperclip::Thumbnail.expects(:make).raises(Paperclip::PaperclipError, "cannot be processed.") + @file = StringIO.new("...") + @file.stubs(:to_tempfile).returns(@file) + @dummy.avatar = @file + end + + should "correctly forward processing error message to the instance" do + @dummy.valid? + assert_contains @dummy.errors.full_messages, "Avatar cannot be processed." + end + end + + context "An attachment with multiple processors" do + setup do + class Paperclip::Test < Paperclip::Processor; end + @style_params = { :once => {:one => 1, :two => 2} } + rebuild_model :processors => [:thumbnail, :test], :styles => @style_params + @dummy = Dummy.new + @file = StringIO.new("...") + @file.stubs(:to_tempfile).returns(@file) + Paperclip::Test.stubs(:make).returns(@file) + Paperclip::Thumbnail.stubs(:make).returns(@file) + end + + context "when assigned" do + setup { @dummy.avatar = @file } + + before_should "call #make on all specified processors" do + Paperclip::Thumbnail.expects(:make).with(any_parameters).returns(@file) + Paperclip::Test.expects(:make).with(any_parameters).returns(@file) + end + + before_should "call #make with the right parameters passed as second argument" do + expected_params = @style_params[:once].merge({:processors => [:thumbnail, :test], :whiny => true, :convert_options => ""}) + Paperclip::Thumbnail.expects(:make).with(anything, expected_params, anything).returns(@file) + end + + before_should "call #make with attachment passed as third argument" do + Paperclip::Test.expects(:make).with(anything, anything, @dummy.avatar).returns(@file) + end + end + end + + context "An attachment with styles but no processors defined" do + setup do + rebuild_model :processors => [], :styles => {:something => 1} + @dummy = Dummy.new + @file = StringIO.new("...") + end + should "raise when assigned to" do + assert_raises(RuntimeError){ @dummy.avatar = @file } + end + end + + context "An attachment without styles and with no processors defined" do + setup do + rebuild_model :processors => [], :styles => {} + @dummy = Dummy.new + @file = StringIO.new("...") + end + should "not raise when assigned to" do + @dummy.avatar = @file + end + end + + context "Assigning an attachment with post_process hooks" do + setup do + rebuild_model :styles => { :something => "100x100#" } + Dummy.class_eval do + before_avatar_post_process :do_before_avatar + after_avatar_post_process :do_after_avatar + before_post_process :do_before_all + after_post_process :do_after_all + def do_before_avatar; end + def do_after_avatar; end + def do_before_all; end + def do_after_all; end + end + @file = StringIO.new(".") + @file.stubs(:to_tempfile).returns(@file) + @dummy = Dummy.new + Paperclip::Thumbnail.stubs(:make).returns(@file) + @attachment = @dummy.avatar + end + + should "call the defined callbacks when assigned" do + @dummy.expects(:do_before_avatar).with() + @dummy.expects(:do_after_avatar).with() + @dummy.expects(:do_before_all).with() + @dummy.expects(:do_after_all).with() + Paperclip::Thumbnail.expects(:make).returns(@file) + @dummy.avatar = @file + end + + should "not cancel the processing if a before_post_process returns nil" do + @dummy.expects(:do_before_avatar).with().returns(nil) + @dummy.expects(:do_after_avatar).with() + @dummy.expects(:do_before_all).with().returns(nil) + @dummy.expects(:do_after_all).with() + Paperclip::Thumbnail.expects(:make).returns(@file) + @dummy.avatar = @file + end + + should "cancel the processing if a before_post_process returns false" do + @dummy.expects(:do_before_avatar).never + @dummy.expects(:do_after_avatar).never + @dummy.expects(:do_before_all).with().returns(false) + @dummy.expects(:do_after_all).never + Paperclip::Thumbnail.expects(:make).never + @dummy.avatar = @file + end + + should "cancel the processing if a before_avatar_post_process returns false" do + @dummy.expects(:do_before_avatar).with().returns(false) + @dummy.expects(:do_after_avatar).never + @dummy.expects(:do_before_all).with().returns(true) + @dummy.expects(:do_after_all).never + Paperclip::Thumbnail.expects(:make).never + @dummy.avatar = @file + end + end + + context "Assigning an attachment" do + setup do + rebuild_model :styles => { :something => "100x100#" } + @file = StringIO.new(".") + @file.expects(:original_filename).returns("5k.png\n\n") + @file.expects(:content_type).returns("image/png\n\n") + @file.stubs(:to_tempfile).returns(@file) + @dummy = Dummy.new + Paperclip::Thumbnail.expects(:make).returns(@file) + @dummy.expects(:run_callbacks).with(:before_avatar_post_process, {:original => @file}) + @dummy.expects(:run_callbacks).with(:before_post_process, {:original => @file}) + @dummy.expects(:run_callbacks).with(:after_avatar_post_process, {:original => @file, :something => @file}) + @dummy.expects(:run_callbacks).with(:after_post_process, {:original => @file, :something => @file}) + @attachment = @dummy.avatar + @dummy.avatar = @file + end + + should "strip whitespace from original_filename field" do + assert_equal "5k.png", @dummy.avatar.original_filename + end + + should "strip whitespace from content_type field" do + assert_equal "image/png", @dummy.avatar.instance.avatar_content_type + end + end + + context "Attachment with strange letters" do + setup do + rebuild_model + + @not_file = mock + @tempfile = mock + @not_file.stubs(:nil?).returns(false) + @not_file.expects(:size).returns(10) + @tempfile.expects(:size).returns(10) + @not_file.expects(:to_tempfile).returns(@tempfile) + @not_file.expects(:original_filename).returns("sheep_say_bæ.png\r\n") + @not_file.expects(:content_type).returns("image/png\r\n") + + @dummy = Dummy.new + @attachment = @dummy.avatar + @attachment.expects(:valid_assignment?).with(@not_file).returns(true) + @attachment.expects(:queue_existing_for_delete) + @attachment.expects(:post_process) + @dummy.avatar = @not_file + end + + should "remove strange letters and replace with underscore (_)" do + assert_equal "sheep_say_b_.png", @dummy.avatar.original_filename + end + + end + + context "An attachment" do + setup do + @old_defaults = Paperclip::Attachment.default_options.dup + Paperclip::Attachment.default_options.merge!({ + :path => ":rails_root/tmp/:attachment/:class/:style/:id/:basename.:extension" + }) + FileUtils.rm_rf("tmp") + rebuild_model + @instance = Dummy.new + @instance.stubs(:id).returns 123 + @attachment = Paperclip::Attachment.new(:avatar, @instance) + @file = File.new(File.join(File.dirname(__FILE__), "fixtures", "5k.png"), 'rb') + end + + teardown do + @file.close + Paperclip::Attachment.default_options.merge!(@old_defaults) + end + + should "raise if there are not the correct columns when you try to assign" do + @other_attachment = Paperclip::Attachment.new(:not_here, @instance) + assert_raises(Paperclip::PaperclipError) do + @other_attachment.assign(@file) + end + end + + should "return its default_url when no file assigned" do + assert @attachment.to_file.nil? + assert_equal "/avatars/original/missing.png", @attachment.url + assert_equal "/avatars/blah/missing.png", @attachment.url(:blah) + end + + should "return nil as path when no file assigned" do + assert @attachment.to_file.nil? + assert_equal nil, @attachment.path + assert_equal nil, @attachment.path(:blah) + end + + context "with a file assigned in the database" do + setup do + @attachment.stubs(:instance_read).with(:file_name).returns("5k.png") + @attachment.stubs(:instance_read).with(:content_type).returns("image/png") + @attachment.stubs(:instance_read).with(:file_size).returns(12345) + dtnow = DateTime.now + @now = Time.now + Time.stubs(:now).returns(@now) + @attachment.stubs(:instance_read).with(:updated_at).returns(dtnow) + end + + should "return a correct url even if the file does not exist" do + assert_nil @attachment.to_file + assert_match %r{^/system/avatars/#{@instance.id}/blah/5k\.png}, @attachment.url(:blah) + end + + should "make sure the updated_at mtime is in the url if it is defined" do + assert_match %r{#{@now.to_i}$}, @attachment.url(:blah) + end + + should "make sure the updated_at mtime is NOT in the url if false is passed to the url method" do + assert_no_match %r{#{@now.to_i}$}, @attachment.url(:blah, false) + end + + context "with the updated_at field removed" do + setup do + @attachment.stubs(:instance_read).with(:updated_at).returns(nil) + end + + should "only return the url without the updated_at when sent #url" do + assert_match "/avatars/#{@instance.id}/blah/5k.png", @attachment.url(:blah) + end + end + + should "return the proper path when filename has a single .'s" do + assert_equal File.expand_path("./test/../tmp/avatars/dummies/original/#{@instance.id}/5k.png"), File.expand_path(@attachment.path) + end + + should "return the proper path when filename has multiple .'s" do + @attachment.stubs(:instance_read).with(:file_name).returns("5k.old.png") + assert_equal File.expand_path("./test/../tmp/avatars/dummies/original/#{@instance.id}/5k.old.png"), File.expand_path(@attachment.path) + end + + context "when expecting three styles" do + setup do + styles = {:styles => { :large => ["400x400", :png], + :medium => ["100x100", :gif], + :small => ["32x32#", :jpg]}} + @attachment = Paperclip::Attachment.new(:avatar, + @instance, + styles) + end + + context "and assigned a file" do + setup do + now = Time.now + Time.stubs(:now).returns(now) + @attachment.assign(@file) + end + + should "be dirty" do + assert @attachment.dirty? + end + + context "and saved" do + setup do + @attachment.save + end + + should "return the real url" do + file = @attachment.to_file + assert file + assert_match %r{^/system/avatars/#{@instance.id}/original/5k\.png}, @attachment.url + assert_match %r{^/system/avatars/#{@instance.id}/small/5k\.jpg}, @attachment.url(:small) + file.close + end + + should "commit the files to disk" do + [:large, :medium, :small].each do |style| + io = @attachment.to_file(style) + # p "in commit to disk test, io is #{io.inspect} and @instance.id is #{@instance.id}" + assert File.exists?(io) + assert ! io.is_a?(::Tempfile) + io.close + end + end + + should "save the files as the right formats and sizes" do + [[:large, 400, 61, "PNG"], + [:medium, 100, 15, "GIF"], + [:small, 32, 32, "JPEG"]].each do |style| + cmd = %Q[identify -format "%w %h %b %m" "#{@attachment.path(style.first)}"] + out = `#{cmd}` + width, height, size, format = out.split(" ") + assert_equal style[1].to_s, width.to_s + assert_equal style[2].to_s, height.to_s + assert_equal style[3].to_s, format.to_s + end + end + + should "still have its #file attribute not be nil" do + assert ! (file = @attachment.to_file).nil? + file.close + end + + context "and trying to delete" do + setup do + @existing_names = @attachment.styles.keys.collect do |style| + @attachment.path(style) + end + end + + should "delete the files after assigning nil" do + @attachment.expects(:instance_write).with(:file_name, nil) + @attachment.expects(:instance_write).with(:content_type, nil) + @attachment.expects(:instance_write).with(:file_size, nil) + @attachment.expects(:instance_write).with(:updated_at, nil) + @attachment.assign nil + @attachment.save + @existing_names.each{|f| assert ! File.exists?(f) } + end + + should "delete the files when you call #clear and #save" do + @attachment.expects(:instance_write).with(:file_name, nil) + @attachment.expects(:instance_write).with(:content_type, nil) + @attachment.expects(:instance_write).with(:file_size, nil) + @attachment.expects(:instance_write).with(:updated_at, nil) + @attachment.clear + @attachment.save + @existing_names.each{|f| assert ! File.exists?(f) } + end + + should "delete the files when you call #delete" do + @attachment.expects(:instance_write).with(:file_name, nil) + @attachment.expects(:instance_write).with(:content_type, nil) + @attachment.expects(:instance_write).with(:file_size, nil) + @attachment.expects(:instance_write).with(:updated_at, nil) + @attachment.destroy + @existing_names.each{|f| assert ! File.exists?(f) } + end + end + end + end + end + + end + + context "when trying a nonexistant storage type" do + setup do + rebuild_model :storage => :not_here + end + + should "not be able to find the module" do + assert_raise(NameError){ Dummy.new.avatar } + end + end + end + + context "An attachment with only a avatar_file_name column" do + setup do + ActiveRecord::Base.connection.create_table :dummies, :force => true do |table| + table.column :avatar_file_name, :string + end + rebuild_class + @dummy = Dummy.new + @file = File.new(File.join(File.dirname(__FILE__), "fixtures", "5k.png"), 'rb') + end + + teardown { @file.close } + + should "not error when assigned an attachment" do + assert_nothing_raised { @dummy.avatar = @file } + end + + should "return the time when sent #avatar_updated_at" do + now = Time.now + Time.stubs(:now).returns(now) + @dummy.avatar = @file + assert now, @dummy.avatar.updated_at + end + + should "return nil when reloaded and sent #avatar_updated_at" do + @dummy.save + @dummy.reload + assert_nil @dummy.avatar.updated_at + end + + should "return the right value when sent #avatar_file_size" do + @dummy.avatar = @file + assert_equal @file.size, @dummy.avatar.size + end + + context "and avatar_updated_at column" do + setup do + ActiveRecord::Base.connection.add_column :dummies, :avatar_updated_at, :timestamp + rebuild_class + @dummy = Dummy.new + end + + should "not error when assigned an attachment" do + assert_nothing_raised { @dummy.avatar = @file } + end + + should "return the right value when sent #avatar_updated_at" do + now = Time.now + Time.stubs(:now).returns(now) + @dummy.avatar = @file + assert_equal now.to_i, @dummy.avatar.updated_at + end + end + + context "and avatar_content_type column" do + setup do + ActiveRecord::Base.connection.add_column :dummies, :avatar_content_type, :string + rebuild_class + @dummy = Dummy.new + end + + should "not error when assigned an attachment" do + assert_nothing_raised { @dummy.avatar = @file } + end + + should "return the right value when sent #avatar_content_type" do + @dummy.avatar = @file + assert_equal "image/png", @dummy.avatar.content_type + end + end + + context "and avatar_file_size column" do + setup do + ActiveRecord::Base.connection.add_column :dummies, :avatar_file_size, :integer + rebuild_class + @dummy = Dummy.new + end + + should "not error when assigned an attachment" do + assert_nothing_raised { @dummy.avatar = @file } + end + + should "return the right value when sent #avatar_file_size" do + @dummy.avatar = @file + assert_equal @file.size, @dummy.avatar.size + end + + should "return the right value when saved, reloaded, and sent #avatar_file_size" do + @dummy.avatar = @file + @dummy.save + @dummy = Dummy.find(@dummy.id) + assert_equal @file.size, @dummy.avatar.size + end + end + end +end diff --git a/online/vendor/plugins/paperclip/test/database.yml b/online/vendor/plugins/paperclip/test/database.yml new file mode 100644 index 0000000..c12ad28 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/database.yml @@ -0,0 +1,4 @@ +test: + adapter: sqlite3 + database: ":memory:" + diff --git a/online/vendor/plugins/paperclip/test/fixtures/12k.png b/online/vendor/plugins/paperclip/test/fixtures/12k.png new file mode 100644 index 0000000000000000000000000000000000000000..f819d45195c3155fce332105f54d089f77b6f05c GIT binary patch literal 12093 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

    tHicjh6Xr8>U58+a2U=)3Yrl+6 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 literal 0 HcwPel00001 diff --git a/online/vendor/plugins/paperclip/test/fixtures/bad.png b/online/vendor/plugins/paperclip/test/fixtures/bad.png new file mode 100644 index 0000000..7ba4f07 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/fixtures/bad.png @@ -0,0 +1 @@ +This is not an image. diff --git a/online/vendor/plugins/paperclip/test/fixtures/s3.yml b/online/vendor/plugins/paperclip/test/fixtures/s3.yml new file mode 100644 index 0000000..13c8b0c --- /dev/null +++ b/online/vendor/plugins/paperclip/test/fixtures/s3.yml @@ -0,0 +1,8 @@ +development: + key: 54321 +production: + key: 12345 +test: + bucket: <%= ENV['S3_BUCKET'] %> + access_key_id: <%= ENV['S3_KEY'] %> + secret_access_key: <%= ENV['S3_SECRET'] %> diff --git a/online/vendor/plugins/paperclip/test/fixtures/text.txt b/online/vendor/plugins/paperclip/test/fixtures/text.txt new file mode 100644 index 0000000..e69de29 diff --git a/online/vendor/plugins/paperclip/test/fixtures/twopage.pdf b/online/vendor/plugins/paperclip/test/fixtures/twopage.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0c34a5193f4404443922279f43c7f4f2309c0247 GIT binary patch literal 8775 zcwWVMbyQT_+dl?1pma!%bUMTIAR*0wqEaFuF$~=;AuTPPBQ2#!2`C^bpfpIglpvB4 zBB8%Q@AuyOz24t?-~ZmT);VYI&wln3`}ypB&RP%eEqO&zu`4hD@0%xYUcae+lL>$T z!9aTxD}aOq=sM2M+{FS2B_Qe`MN1nOoD)dV#@GcXkHgxV;-sVi&MrvlKsiWj{fGZk;CKm#v4jmk+hXmq^4 zZTof>VW%qvqo>vSJpN|9X{qBVVyJ1!=VnatWtq7TG!+9up;uTjD46)}b4fFq>wB;d zLl1pLQP}Qir@ZohdAc7&XT5W33SdMKm(p49M$il}IjjjF#pry5{%TRd5VEIGD3I3p||%)dONNLD#KpaFk5 zCYL&n(H3iDVQy-LH8TBRW@KVySzv97wJ>60oo`!WX<>NBP)I~nbDgpFUm`&KCjv0^ zPYm^21nB=y1b>W+0mZ;z1nTecEa~3&)@w`8bpO;K+7-^AcQeU;Jc(QH;zi8vJa^db z0J^sbM00C+UMrwFPsNEXggzvg8Ve*XW6R4+2zJX}&q1}LnneWrZB&xEgRAQ*E1zUK zB=8DS_^Y#Yo%F0=+yXwCyZa9XQHVO z-Gc<=`g)l`MP8NETUWOv%0yq+8-87EPA3zqqs~dT-DI6Xd>cVsEADwS`leyu|u*weXQ^>l#)yBzijl5)# zvJ3MBQX^ZWZe1z9`(vHEBayi#x@K^VqdMX~tN&TE*-Xj!vBWKY@l>x^hT5r+4EeYH zm|ZK+ewe5KYxf*Sm$N6wv=5QFUISm7rDtS)RR%e(QRQ;x9Ppl8q*=wTkne(41jHZR zJ3k>HPC4{;Ao}ATMfS-G(34CuU?$5+ej=hWRz+n?=}FE_joYh4or<`^GX^0!D|{}j z?_9%mNh=wyO%e@}O$2X{tctl(cH-G8hHw7imK}Y_emj?| zha87zJQ)`!F2u1b&g%Nj_EbhyXES>;DK=a`;r5}`-aS`&(?lK+8a$};%!X+|G)*$_ zR*Uq}rGs_t!?Py>KFpE|o7X-Ebytt%!LOJr+`nt=Kb&IR|4fTbHF?`HKWkvd;_Kd{ z?Wp?Wl=|$t?AP6s?+3<=%E!gKx;%i$Eyt&L`^eInacd6iR`z)krN>t+TKgWoa!^7N zc?I^E1tvw-Bo&R*x%XPn2Rb%0DY9qx0nS>ez)Er#I_LxO)$bO1Q~_KH07} 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 bgdhMvzq7_pE', '<', '#', '@', '%', '^', '!', nil].each do |mod| + should "ensure the modifier #{mod.inspect} is preserved" do + assert @geo = Paperclip::Geometry.parse("123x456#{mod}") + assert_equal mod, @geo.modifier + assert_equal "123x456#{mod}", @geo.to_s + end + end + + ['>', '<', '#', '@', '%', '^', '!', nil].each do |mod| + should "ensure the modifier #{mod.inspect} is preserved with no height" do + assert @geo = Paperclip::Geometry.parse("123x#{mod}") + assert_equal mod, @geo.modifier + assert_equal "123#{mod}", @geo.to_s + end + end + + should "make sure the modifier gets passed during transformation_to" do + assert @src = Paperclip::Geometry.parse("123x456") + assert @dst = Paperclip::Geometry.parse("123x456>") + assert_equal ["123x456>", nil], @src.transformation_to(@dst) + end + + should "generate correct ImageMagick formatting string for W-formatted string" do + assert @geo = Paperclip::Geometry.parse("800") + assert_equal "800", @geo.to_s + end + + should "generate correct ImageMagick formatting string for Wx-formatted string" do + assert @geo = Paperclip::Geometry.parse("800x") + assert_equal "800", @geo.to_s + end + + should "generate correct ImageMagick formatting string for xH-formatted string" do + assert @geo = Paperclip::Geometry.parse("x600") + assert_equal "x600", @geo.to_s + end + + should "generate correct ImageMagick formatting string for WxH-formatted string" do + assert @geo = Paperclip::Geometry.parse("800x600") + assert_equal "800x600", @geo.to_s + end + + should "be generated from a file" do + file = File.join(File.dirname(__FILE__), "fixtures", "5k.png") + file = File.new(file, 'rb') + assert_nothing_raised{ @geo = Paperclip::Geometry.from_file(file) } + assert @geo.height > 0 + assert @geo.width > 0 + end + + should "be generated from a file path" do + file = File.join(File.dirname(__FILE__), "fixtures", "5k.png") + assert_nothing_raised{ @geo = Paperclip::Geometry.from_file(file) } + assert @geo.height > 0 + assert @geo.width > 0 + end + + should "not generate from a bad file" do + file = "/home/This File Does Not Exist.omg" + assert_raise(Paperclip::NotIdentifiedByImageMagickError){ @geo = Paperclip::Geometry.from_file(file) } + end + + [['vertical', 900, 1440, true, false, false, 1440, 900, 0.625], + ['horizontal', 1024, 768, false, true, false, 1024, 768, 1.3333], + ['square', 100, 100, false, false, true, 100, 100, 1]].each do |args| + context "performing calculations on a #{args[0]} viewport" do + setup do + @geo = Paperclip::Geometry.new(args[1], args[2]) + end + + should "#{args[3] ? "" : "not"} be vertical" do + assert_equal args[3], @geo.vertical? + end + + should "#{args[4] ? "" : "not"} be horizontal" do + assert_equal args[4], @geo.horizontal? + end + + should "#{args[5] ? "" : "not"} be square" do + assert_equal args[5], @geo.square? + end + + should "report that #{args[6]} is the larger dimension" do + assert_equal args[6], @geo.larger + end + + should "report that #{args[7]} is the smaller dimension" do + assert_equal args[7], @geo.smaller + end + + should "have an aspect ratio of #{args[8]}" do + assert_in_delta args[8], @geo.aspect, 0.0001 + end + end + end + + [[ [1000, 100], [64, 64], "x64", "64x64+288+0" ], + [ [100, 1000], [50, 950], "x950", "50x950+22+0" ], + [ [100, 1000], [50, 25], "50x", "50x25+0+237" ]]. each do |args| + context "of #{args[0].inspect} and given a Geometry #{args[1].inspect} and sent transform_to" do + setup do + @geo = Paperclip::Geometry.new(*args[0]) + @dst = Paperclip::Geometry.new(*args[1]) + @scale, @crop = @geo.transformation_to @dst, true + end + + should "be able to return the correct scaling transformation geometry #{args[2]}" do + assert_equal args[2], @scale + end + + should "be able to return the correct crop transformation geometry #{args[3]}" do + assert_equal args[3], @crop + end + end + end + end +end diff --git a/online/vendor/plugins/paperclip/test/helper.rb b/online/vendor/plugins/paperclip/test/helper.rb new file mode 100644 index 0000000..5c56107 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/helper.rb @@ -0,0 +1,128 @@ +require 'rubygems' +require 'test/unit' +require 'shoulda' +require 'tempfile' + +gem 'jferris-mocha' +require 'mocha' + +gem 'sqlite3-ruby' + +require 'active_record' +require 'active_support' +begin + require 'ruby-debug' +rescue LoadError + puts "ruby-debug not loaded" +end + +ROOT = File.join(File.dirname(__FILE__), '..') +RAILS_ROOT = ROOT +RAILS_ENV = "test" + +$LOAD_PATH << File.join(ROOT, 'lib') +$LOAD_PATH << File.join(ROOT, 'lib', 'paperclip') + +require File.join(ROOT, 'lib', 'paperclip.rb') + +require 'shoulda_macros/paperclip' + +FIXTURES_DIR = File.join(File.dirname(__FILE__), "fixtures") +config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml')) +ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log") +ActiveRecord::Base.establish_connection(config['test']) + +def reset_class class_name + ActiveRecord::Base.send(:include, Paperclip) + Object.send(:remove_const, class_name) rescue nil + klass = Object.const_set(class_name, Class.new(ActiveRecord::Base)) + klass.class_eval{ include Paperclip } + klass +end + +def reset_table table_name, &block + block ||= lambda { |table| true } + ActiveRecord::Base.connection.create_table :dummies, {:force => true}, &block +end + +def modify_table table_name, &block + ActiveRecord::Base.connection.change_table :dummies, &block +end + +def rebuild_model options = {} + ActiveRecord::Base.connection.create_table :dummies, :force => true do |table| + table.column :other, :string + table.column :avatar_file_name, :string + table.column :avatar_content_type, :string + table.column :avatar_file_size, :integer + table.column :avatar_updated_at, :datetime + end + rebuild_class options +end + +def rebuild_class options = {} + ActiveRecord::Base.send(:include, Paperclip) + Object.send(:remove_const, "Dummy") rescue nil + Object.const_set("Dummy", Class.new(ActiveRecord::Base)) + Dummy.class_eval do + include Paperclip + has_attached_file :avatar, options + end +end + +def temporary_rails_env(new_env) + old_env = Object.const_defined?("RAILS_ENV") ? RAILS_ENV : nil + silence_warnings do + Object.const_set("RAILS_ENV", new_env) + end + yield + silence_warnings do + Object.const_set("RAILS_ENV", old_env) + end +end + +class FakeModel + attr_accessor :avatar_file_name, + :avatar_file_size, + :avatar_last_updated, + :avatar_content_type, + :id + + def errors + @errors ||= [] + end + + def run_callbacks name, *args + end +end + +def attachment options + Paperclip::Attachment.new(:avatar, FakeModel.new, options) +end + +def silence_warnings + old_verbose, $VERBOSE = $VERBOSE, nil + yield +ensure + $VERBOSE = old_verbose +end + +def should_accept_dummy_class + should "accept the class" do + assert_accepts @matcher, @dummy_class + end + + should "accept an instance of that class" do + assert_accepts @matcher, @dummy_class.new + end +end + +def should_reject_dummy_class + should "reject the class" do + assert_rejects @matcher, @dummy_class + end + + should "reject an instance of that class" do + assert_rejects @matcher, @dummy_class.new + end +end diff --git a/online/vendor/plugins/paperclip/test/integration_test.rb b/online/vendor/plugins/paperclip/test/integration_test.rb new file mode 100644 index 0000000..e7512c9 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/integration_test.rb @@ -0,0 +1,483 @@ +require 'test/helper' + +class IntegrationTest < Test::Unit::TestCase + context "Many models at once" do + setup do + rebuild_model + @file = File.new(File.join(FIXTURES_DIR, "5k.png"), 'rb') + 300.times do |i| + Dummy.create! :avatar => @file + end + end + + should "not exceed the open file limit" do + assert_nothing_raised do + dummies = Dummy.find(:all) + dummies.each { |dummy| dummy.avatar } + end + end + end + + context "An attachment" do + setup do + rebuild_model :styles => { :thumb => "50x50#" } + @dummy = Dummy.new + @file = File.new(File.join(File.dirname(__FILE__), + "fixtures", + "5k.png"), 'rb') + @dummy.avatar = @file + assert @dummy.save + end + + teardown { @file.close } + + should "create its thumbnails properly" do + assert_match /\b50x50\b/, `identify "#{@dummy.avatar.path(:thumb)}"` + end + + context "redefining its attachment styles" do + setup do + Dummy.class_eval do + has_attached_file :avatar, :styles => { :thumb => "150x25#" } + has_attached_file :avatar, :styles => { :thumb => "150x25#", :dynamic => lambda { |a| '50x50#' } } + end + @d2 = Dummy.find(@dummy.id) + @d2.avatar.reprocess! + @d2.save + end + + should "create its thumbnails properly" do + assert_match /\b150x25\b/, `identify "#{@dummy.avatar.path(:thumb)}"` + assert_match /\b50x50\b/, `identify "#{@dummy.avatar.path(:dynamic)}"` + end + end + end + + context "A model that modifies its original" do + setup do + rebuild_model :styles => { :original => "2x2#" } + @dummy = Dummy.new + @file = File.new(File.join(File.dirname(__FILE__), + "fixtures", + "5k.png"), 'rb') + @dummy.avatar = @file + end + + should "report the file size of the processed file and not the original" do + assert_not_equal @file.size, @dummy.avatar.size + end + + teardown { @file.close } + end + + context "A model with attachments scoped under an id" do + setup do + rebuild_model :styles => { :large => "100x100", + :medium => "50x50" }, + :path => ":rails_root/tmp/:id/:attachments/:style.:extension" + @dummy = Dummy.new + @file = File.new(File.join(File.dirname(__FILE__), + "fixtures", + "5k.png"), 'rb') + @dummy.avatar = @file + end + + teardown { @file.close } + + context "when saved" do + setup do + @dummy.save + @saved_path = @dummy.avatar.path(:large) + end + + should "have a large file in the right place" do + assert File.exists?(@dummy.avatar.path(:large)) + end + + context "and deleted" do + setup do + @dummy.avatar.clear + @dummy.save + end + + should "not have a large file in the right place anymore" do + assert ! File.exists?(@saved_path) + end + + should "not have its next two parent directories" do + assert ! File.exists?(File.dirname(@saved_path)) + assert ! File.exists?(File.dirname(File.dirname(@saved_path))) + end + + before_should "not die if an unexpected SystemCallError happens" do + FileUtils.stubs(:rmdir).raises(Errno::EPIPE) + end + end + end + end + + context "A model with no attachment validation" do + setup do + rebuild_model :styles => { :large => "300x300>", + :medium => "100x100", + :thumb => ["32x32#", :gif] }, + :default_style => :medium, + :url => "/:attachment/:class/:style/:id/:basename.:extension", + :path => ":rails_root/tmp/:attachment/:class/:style/:id/:basename.:extension" + @dummy = Dummy.new + end + + should "have its definition return false when asked about whiny_thumbnails" do + assert ! Dummy.attachment_definitions[:avatar][:whiny_thumbnails] + end + + context "when validates_attachment_thumbnails is called" do + setup do + Dummy.validates_attachment_thumbnails :avatar + end + + should "have its definition return true when asked about whiny_thumbnails" do + assert_equal true, Dummy.attachment_definitions[:avatar][:whiny_thumbnails] + end + end + + context "redefined to have attachment validations" do + setup do + rebuild_model :styles => { :large => "300x300>", + :medium => "100x100", + :thumb => ["32x32#", :gif] }, + :whiny_thumbnails => true, + :default_style => :medium, + :url => "/:attachment/:class/:style/:id/:basename.:extension", + :path => ":rails_root/tmp/:attachment/:class/:style/:id/:basename.:extension" + end + + should "have its definition return true when asked about whiny_thumbnails" do + assert_equal true, Dummy.attachment_definitions[:avatar][:whiny_thumbnails] + end + end + end + + context "A model with no convert_options setting" do + setup do + rebuild_model :styles => { :large => "300x300>", + :medium => "100x100", + :thumb => ["32x32#", :gif] }, + :default_style => :medium, + :url => "/:attachment/:class/:style/:id/:basename.:extension", + :path => ":rails_root/tmp/:attachment/:class/:style/:id/:basename.:extension" + @dummy = Dummy.new + end + + should "have its definition return nil when asked about convert_options" do + assert ! Dummy.attachment_definitions[:avatar][:convert_options] + end + + context "redefined to have convert_options setting" do + setup do + rebuild_model :styles => { :large => "300x300>", + :medium => "100x100", + :thumb => ["32x32#", :gif] }, + :convert_options => "-strip -depth 8", + :default_style => :medium, + :url => "/:attachment/:class/:style/:id/:basename.:extension", + :path => ":rails_root/tmp/:attachment/:class/:style/:id/:basename.:extension" + end + + should "have its definition return convert_options value when asked about convert_options" do + assert_equal "-strip -depth 8", Dummy.attachment_definitions[:avatar][:convert_options] + end + end + end + + context "A model with a filesystem attachment" do + setup do + rebuild_model :styles => { :large => "300x300>", + :medium => "100x100", + :thumb => ["32x32#", :gif] }, + :whiny_thumbnails => true, + :default_style => :medium, + :url => "/:attachment/:class/:style/:id/:basename.:extension", + :path => ":rails_root/tmp/:attachment/:class/:style/:id/:basename.:extension" + @dummy = Dummy.new + @file = File.new(File.join(FIXTURES_DIR, "5k.png"), 'rb') + @bad_file = File.new(File.join(FIXTURES_DIR, "bad.png"), 'rb') + + assert @dummy.avatar = @file + assert @dummy.valid? + assert @dummy.save + end + + should "write and delete its files" do + [["434x66", :original], + ["300x46", :large], + ["100x15", :medium], + ["32x32", :thumb]].each do |geo, style| + cmd = %Q[identify -format "%wx%h" "#{@dummy.avatar.path(style)}"] + assert_equal geo, `#{cmd}`.chomp, cmd + end + + saved_paths = [:thumb, :medium, :large, :original].collect{|s| @dummy.avatar.path(s) } + + @d2 = Dummy.find(@dummy.id) + assert_equal "100x15", `identify -format "%wx%h" "#{@d2.avatar.path}"`.chomp + assert_equal "434x66", `identify -format "%wx%h" "#{@d2.avatar.path(:original)}"`.chomp + assert_equal "300x46", `identify -format "%wx%h" "#{@d2.avatar.path(:large)}"`.chomp + assert_equal "100x15", `identify -format "%wx%h" "#{@d2.avatar.path(:medium)}"`.chomp + assert_equal "32x32", `identify -format "%wx%h" "#{@d2.avatar.path(:thumb)}"`.chomp + + @dummy.avatar = "not a valid file but not nil" + assert_equal File.basename(@file.path), @dummy.avatar_file_name + assert @dummy.valid? + assert @dummy.save + + saved_paths.each do |p| + assert File.exists?(p) + end + + @dummy.avatar.clear + assert_nil @dummy.avatar_file_name + assert @dummy.valid? + assert @dummy.save + + saved_paths.each do |p| + assert ! File.exists?(p) + end + + @d2 = Dummy.find(@dummy.id) + assert_nil @d2.avatar_file_name + end + + should "work exactly the same when new as when reloaded" do + @d2 = Dummy.find(@dummy.id) + + assert_equal @dummy.avatar_file_name, @d2.avatar_file_name + [:thumb, :medium, :large, :original].each do |style| + assert_equal @dummy.avatar.path(style), @d2.avatar.path(style) + end + + saved_paths = [:thumb, :medium, :large, :original].collect{|s| @dummy.avatar.path(s) } + + @d2.avatar.clear + assert @d2.save + + saved_paths.each do |p| + assert ! File.exists?(p) + end + end + + should "know the difference between good files, bad files, and not files" do + expected = @dummy.avatar.to_file + @dummy.avatar = "not a file" + assert @dummy.valid? + assert_equal expected.path, @dummy.avatar.path + expected.close + + @dummy.avatar = @bad_file + assert ! @dummy.valid? + end + + should "know the difference between good files, bad files, and not files when validating" do + Dummy.validates_attachment_presence :avatar + @d2 = Dummy.find(@dummy.id) + @d2.avatar = @file + assert @d2.valid?, @d2.errors.full_messages.inspect + @d2.avatar = @bad_file + assert ! @d2.valid? + end + + should "be able to reload without saving and not have the file disappear" do + @dummy.avatar = @file + assert @dummy.save + @dummy.avatar.clear + assert_nil @dummy.avatar_file_name + @dummy.reload + assert_equal "5k.png", @dummy.avatar_file_name + end + + context "that is assigned its file from another Paperclip attachment" do + setup do + @dummy2 = Dummy.new + @file2 = File.new(File.join(FIXTURES_DIR, "12k.png"), 'rb') + assert @dummy2.avatar = @file2 + @dummy2.save + end + + should "work when assigned a file" do + assert_not_equal `identify -format "%wx%h" "#{@dummy.avatar.path(:original)}"`, + `identify -format "%wx%h" "#{@dummy2.avatar.path(:original)}"` + + assert @dummy.avatar = @dummy2.avatar + @dummy.save + assert_equal `identify -format "%wx%h" "#{@dummy.avatar.path(:original)}"`, + `identify -format "%wx%h" "#{@dummy2.avatar.path(:original)}"` + end + end + + end + + context "A model with an attachments association and a Paperclip attachment" do + setup do + Dummy.class_eval do + has_many :attachments, :class_name => 'Dummy' + end + + @dummy = Dummy.new + @dummy.avatar = File.new(File.join(File.dirname(__FILE__), + "fixtures", + "5k.png"), 'rb') + end + + should "should not error when saving" do + assert_nothing_raised do + @dummy.save! + end + end + end + + if ENV['S3_TEST_BUCKET'] + def s3_files_for attachment + [:thumb, :medium, :large, :original].inject({}) do |files, style| + data = `curl "#{attachment.url(style)}" 2>/dev/null`.chomp + t = Tempfile.new("paperclip-test") + t.binmode + t.write(data) + t.rewind + files[style] = t + files + end + end + + def s3_headers_for attachment, style + `curl --head "#{attachment.url(style)}" 2>/dev/null`.split("\n").inject({}) do |h,head| + split_head = head.chomp.split(/\s*:\s*/, 2) + h[split_head.first.downcase] = split_head.last unless split_head.empty? + h + end + end + + context "A model with an S3 attachment" do + setup do + rebuild_model :styles => { :large => "300x300>", + :medium => "100x100", + :thumb => ["32x32#", :gif] }, + :storage => :s3, + :whiny_thumbnails => true, + # :s3_options => {:logger => Logger.new(StringIO.new)}, + :s3_credentials => File.new(File.join(File.dirname(__FILE__), "s3.yml")), + :default_style => :medium, + :bucket => ENV['S3_TEST_BUCKET'], + :path => ":class/:attachment/:id/:style/:basename.:extension" + @dummy = Dummy.new + @file = File.new(File.join(FIXTURES_DIR, "5k.png"), 'rb') + @bad_file = File.new(File.join(FIXTURES_DIR, "bad.png"), 'rb') + + assert @dummy.avatar = @file + assert @dummy.valid? + assert @dummy.save + + @files_on_s3 = s3_files_for @dummy.avatar + end + + should "have the same contents as the original" do + @file.rewind + assert_equal @file.read, @files_on_s3[:original].read + end + + should "write and delete its files" do + [["434x66", :original], + ["300x46", :large], + ["100x15", :medium], + ["32x32", :thumb]].each do |geo, style| + cmd = %Q[identify -format "%wx%h" "#{@files_on_s3[style].path}"] + assert_equal geo, `#{cmd}`.chomp, cmd + end + + @d2 = Dummy.find(@dummy.id) + @d2_files = s3_files_for @d2.avatar + [["434x66", :original], + ["300x46", :large], + ["100x15", :medium], + ["32x32", :thumb]].each do |geo, style| + cmd = %Q[identify -format "%wx%h" "#{@d2_files[style].path}"] + assert_equal geo, `#{cmd}`.chomp, cmd + end + + @dummy.avatar = "not a valid file but not nil" + assert_equal File.basename(@file.path), @dummy.avatar_file_name + assert @dummy.valid? + assert @dummy.save + + [:thumb, :medium, :large, :original].each do |style| + assert @dummy.avatar.exists?(style) + end + + @dummy.avatar.clear + assert_nil @dummy.avatar_file_name + assert @dummy.valid? + assert @dummy.save + + [:thumb, :medium, :large, :original].each do |style| + assert ! @dummy.avatar.exists?(style) + end + + @d2 = Dummy.find(@dummy.id) + assert_nil @d2.avatar_file_name + end + + should "work exactly the same when new as when reloaded" do + @d2 = Dummy.find(@dummy.id) + + assert_equal @dummy.avatar_file_name, @d2.avatar_file_name + [:thumb, :medium, :large, :original].each do |style| + assert_equal @dummy.avatar.to_file(style).read, @d2.avatar.to_file(style).read + end + + saved_keys = [:thumb, :medium, :large, :original].collect{|s| @dummy.avatar.to_file(s) } + + @d2.avatar.clear + assert @d2.save + + [:thumb, :medium, :large, :original].each do |style| + assert ! @dummy.avatar.exists?(style) + end + end + + should "know the difference between good files, bad files, not files, and nil" do + expected = @dummy.avatar.to_file + @dummy.avatar = "not a file" + assert @dummy.valid? + assert_equal expected.read, @dummy.avatar.to_file.read + + @dummy.avatar = @bad_file + assert ! @dummy.valid? + @dummy.avatar = nil + assert @dummy.valid? + + Dummy.validates_attachment_presence :avatar + @d2 = Dummy.find(@dummy.id) + @d2.avatar = @file + assert @d2.valid? + @d2.avatar = @bad_file + assert ! @d2.valid? + @d2.avatar = nil + assert ! @d2.valid? + end + + should "be able to reload without saving and not have the file disappear" do + @dummy.avatar = @file + assert @dummy.save + @dummy.avatar = nil + assert_nil @dummy.avatar_file_name + @dummy.reload + assert_equal "5k.png", @dummy.avatar_file_name + end + + should "have the right content type" do + headers = s3_headers_for(@dummy.avatar, :original) + assert_equal 'image/png', headers['content-type'] + end + end + end +end + diff --git a/online/vendor/plugins/paperclip/test/interpolations_test.rb b/online/vendor/plugins/paperclip/test/interpolations_test.rb new file mode 100644 index 0000000..04f0542 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/interpolations_test.rb @@ -0,0 +1,124 @@ +require 'test/helper' + +class InterpolationsTest < Test::Unit::TestCase + should "return all methods but the infrastructure when sent #all" do + methods = Paperclip::Interpolations.all + assert ! methods.include?(:[]) + assert ! methods.include?(:[]=) + assert ! methods.include?(:all) + methods.each do |m| + assert Paperclip::Interpolations.respond_to?(m) + end + end + + should "return the RAILS_ROOT" do + assert_equal RAILS_ROOT, Paperclip::Interpolations.rails_root(:attachment, :style) + end + + should "return the RAILS_ENV" do + assert_equal RAILS_ENV, Paperclip::Interpolations.rails_env(:attachment, :style) + end + + should "return the class of the Interpolations module when called with no params" do + assert_equal Module, Paperclip::Interpolations.class + end + + should "return the class of the instance" do + attachment = mock + attachment.expects(:instance).returns(attachment) + attachment.expects(:class).returns("Thing") + assert_equal "things", Paperclip::Interpolations.class(attachment, :style) + end + + should "return the basename of the file" do + attachment = mock + attachment.expects(:original_filename).returns("one.jpg").times(2) + assert_equal "one", Paperclip::Interpolations.basename(attachment, :style) + end + + should "return the extension of the file" do + attachment = mock + attachment.expects(:original_filename).returns("one.jpg") + attachment.expects(:styles).returns({}) + assert_equal "jpg", Paperclip::Interpolations.extension(attachment, :style) + end + + should "return the extension of the file as the format if defined in the style" do + attachment = mock + attachment.expects(:original_filename).never + attachment.expects(:styles).returns({:style => {:format => "png"}}) + assert_equal "png", Paperclip::Interpolations.extension(attachment, :style) + end + + should "return the id of the attachment" do + attachment = mock + attachment.expects(:id).returns(23) + attachment.expects(:instance).returns(attachment) + assert_equal 23, Paperclip::Interpolations.id(attachment, :style) + end + + should "return the partitioned id of the attachment" do + attachment = mock + attachment.expects(:id).returns(23) + attachment.expects(:instance).returns(attachment) + assert_equal "000/000/023", Paperclip::Interpolations.id_partition(attachment, :style) + end + + should "return the name of the attachment" do + attachment = mock + attachment.expects(:name).returns("file") + assert_equal "files", Paperclip::Interpolations.attachment(attachment, :style) + end + + should "return the style" do + assert_equal :style, Paperclip::Interpolations.style(:attachment, :style) + end + + should "return the default style" do + attachment = mock + attachment.expects(:default_style).returns(:default_style) + assert_equal :default_style, Paperclip::Interpolations.style(attachment, nil) + end + + should "reinterpolate :url" do + attachment = mock + attachment.expects(:options).returns({:url => ":id"}) + attachment.expects(:url).with(:style, false).returns("1234") + assert_equal "1234", Paperclip::Interpolations.url(attachment, :style) + end + + should "raise if infinite loop detcted reinterpolating :url" do + attachment = mock + attachment.expects(:options).returns({:url => ":url"}) + assert_raises(Paperclip::InfiniteInterpolationError){ Paperclip::Interpolations.url(attachment, :style) } + end + + should "return the filename as basename.extension" do + attachment = mock + attachment.expects(:styles).returns({}) + attachment.expects(:original_filename).returns("one.jpg").times(3) + assert_equal "one.jpg", Paperclip::Interpolations.filename(attachment, :style) + end + + should "return the filename as basename.extension when format supplied" do + attachment = mock + attachment.expects(:styles).returns({:style => {:format => :png}}) + attachment.expects(:original_filename).returns("one.jpg").times(2) + assert_equal "one.png", Paperclip::Interpolations.filename(attachment, :style) + end + + should "return the timestamp" do + now = Time.now + attachment = mock + attachment.expects(:instance_read).with(:updated_at).returns(now) + assert_equal now.to_s, Paperclip::Interpolations.timestamp(attachment, :style) + end + + should "call all expected interpolations with the given arguments" do + Paperclip::Interpolations.expects(:id).with(:attachment, :style).returns(1234) + Paperclip::Interpolations.expects(:attachment).with(:attachment, :style).returns("attachments") + Paperclip::Interpolations.expects(:notreal).never + value = Paperclip::Interpolations.interpolate(":notreal/:id/:attachment", :attachment, :style) + assert_equal ":notreal/1234/attachments", value + end +end diff --git a/online/vendor/plugins/paperclip/test/iostream_test.rb b/online/vendor/plugins/paperclip/test/iostream_test.rb new file mode 100644 index 0000000..a8dfd82 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/iostream_test.rb @@ -0,0 +1,78 @@ +require 'test/helper' + +class IOStreamTest < Test::Unit::TestCase + context "IOStream" do + should "be included in IO, File, Tempfile, and StringIO" do + [IO, File, Tempfile, StringIO].each do |klass| + assert klass.included_modules.include?(IOStream), "Not in #{klass}" + end + end + end + + context "A file" do + setup do + @file = File.new(File.join(File.dirname(__FILE__), "fixtures", "5k.png"), 'rb') + end + + teardown { @file.close } + + context "that is sent #stream_to" do + + context "and given a String" do + setup do + FileUtils.mkdir_p(File.join(ROOT, 'tmp')) + assert @result = @file.stream_to(File.join(ROOT, 'tmp', 'iostream.string.test')) + end + + should "return a File" do + assert @result.is_a?(File) + end + + should "contain the same data as the original file" do + @file.rewind; @result.rewind + assert_equal @file.read, @result.read + end + end + + context "and given a Tempfile" do + setup do + tempfile = Tempfile.new('iostream.test') + tempfile.binmode + assert @result = @file.stream_to(tempfile) + end + + should "return a Tempfile" do + assert @result.is_a?(Tempfile) + end + + should "contain the same data as the original file" do + @file.rewind; @result.rewind + assert_equal @file.read, @result.read + end + end + + end + + context "that is sent #to_tempfile" do + setup do + assert @tempfile = @file.to_tempfile + end + + should "convert it to a Paperclip Tempfile" do + assert @tempfile.is_a?(Paperclip::Tempfile) + end + + should "have the name be based on the original_filename" do + name = File.basename(@file.path) + extension = File.extname(name) + basename = File.basename(name, extension) + assert_match %r[^#{Regexp.quote(basename)}.*?#{Regexp.quote(extension)}], File.basename(@tempfile.path) + end + + should "have the Tempfile contain the same data as the file" do + @file.rewind; @tempfile.rewind + assert_equal @file.read, @tempfile.read + end + end + end +end diff --git a/online/vendor/plugins/paperclip/test/matchers/have_attached_file_matcher_test.rb b/online/vendor/plugins/paperclip/test/matchers/have_attached_file_matcher_test.rb new file mode 100644 index 0000000..499c2ca --- /dev/null +++ b/online/vendor/plugins/paperclip/test/matchers/have_attached_file_matcher_test.rb @@ -0,0 +1,24 @@ +require 'test/helper' + +class HaveAttachedFileMatcherTest < Test::Unit::TestCase + context "have_attached_file" do + setup do + @dummy_class = reset_class "Dummy" + reset_table "dummies" + @matcher = self.class.have_attached_file(:avatar) + end + + context "given a class with no attachment" do + should_reject_dummy_class + end + + context "given a class with an attachment" do + setup do + modify_table("dummies"){|d| d.string :avatar_file_name } + @dummy_class.has_attached_file :avatar + end + + should_accept_dummy_class + end + end +end diff --git a/online/vendor/plugins/paperclip/test/matchers/validate_attachment_content_type_matcher_test.rb b/online/vendor/plugins/paperclip/test/matchers/validate_attachment_content_type_matcher_test.rb new file mode 100644 index 0000000..c26d409 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/matchers/validate_attachment_content_type_matcher_test.rb @@ -0,0 +1,37 @@ +require 'test/helper' + +class ValidateAttachmentContentTypeMatcherTest < Test::Unit::TestCase + context "validate_attachment_content_type" do + setup do + reset_table("dummies") do |d| + d.string :avatar_file_name + d.string :avatar_content_type + end + @dummy_class = reset_class "Dummy" + @dummy_class.has_attached_file :avatar + @matcher = self.class.validate_attachment_content_type(:avatar). + allowing(%w(image/png image/jpeg)). + rejecting(%w(audio/mp3 application/octet-stream)) + end + + context "given a class with no validation" do + should_reject_dummy_class + end + + context "given a class with a validation that doesn't match" do + setup do + @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{audio/.*} + end + + should_reject_dummy_class + end + + context "given a class with a matching validation" do + setup do + @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{image/.*} + end + + should_accept_dummy_class + end + end +end diff --git a/online/vendor/plugins/paperclip/test/matchers/validate_attachment_presence_matcher_test.rb b/online/vendor/plugins/paperclip/test/matchers/validate_attachment_presence_matcher_test.rb new file mode 100644 index 0000000..718dab8 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/matchers/validate_attachment_presence_matcher_test.rb @@ -0,0 +1,26 @@ +require 'test/helper' + +class ValidateAttachmentPresenceMatcherTest < Test::Unit::TestCase + context "validate_attachment_presence" do + setup do + reset_table("dummies") do |d| + d.string :avatar_file_name + end + @dummy_class = reset_class "Dummy" + @dummy_class.has_attached_file :avatar + @matcher = self.class.validate_attachment_presence(:avatar) + end + + context "given a class with no validation" do + should_reject_dummy_class + end + + context "given a class with a matching validation" do + setup do + @dummy_class.validates_attachment_presence :avatar + end + + should_accept_dummy_class + end + end +end diff --git a/online/vendor/plugins/paperclip/test/matchers/validate_attachment_size_matcher_test.rb b/online/vendor/plugins/paperclip/test/matchers/validate_attachment_size_matcher_test.rb new file mode 100644 index 0000000..b75b491 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/matchers/validate_attachment_size_matcher_test.rb @@ -0,0 +1,51 @@ +require 'test/helper' + +class ValidateAttachmentSizeMatcherTest < Test::Unit::TestCase + context "validate_attachment_size" do + setup do + reset_table("dummies") do |d| + d.string :avatar_file_name + d.integer :avatar_file_size + end + @dummy_class = reset_class "Dummy" + @dummy_class.has_attached_file :avatar + end + + context "of limited size" do + setup{ @matcher = self.class.validate_attachment_size(:avatar).in(256..1024) } + + context "given a class with no validation" do + should_reject_dummy_class + end + + context "given a class with a validation that's too high" do + setup { @dummy_class.validates_attachment_size :avatar, :in => 256..2048 } + should_reject_dummy_class + end + + context "given a class with a validation that's too low" do + setup { @dummy_class.validates_attachment_size :avatar, :in => 0..1024 } + should_reject_dummy_class + end + + context "given a class with a validation that matches" do + setup { @dummy_class.validates_attachment_size :avatar, :in => 256..1024 } + should_accept_dummy_class + end + end + + context "validates_attachment_size with infinite range" do + setup{ @matcher = self.class.validate_attachment_size(:avatar) } + + context "given a class with an upper limit" do + setup { @dummy_class.validates_attachment_size :avatar, :less_than => 1 } + should_accept_dummy_class + end + + context "given a class with no upper limit" do + setup { @dummy_class.validates_attachment_size :avatar, :greater_than => 1 } + should_accept_dummy_class + end + end + end +end diff --git a/online/vendor/plugins/paperclip/test/paperclip_test.rb b/online/vendor/plugins/paperclip/test/paperclip_test.rb new file mode 100644 index 0000000..2474ae5 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/paperclip_test.rb @@ -0,0 +1,298 @@ +require 'test/helper' + +class PaperclipTest < Test::Unit::TestCase + [:image_magick_path, :command_path].each do |path| + context "Calling Paperclip.run with #{path} specified" do + setup do + Paperclip.options[:image_magick_path] = nil + Paperclip.options[:command_path] = nil + Paperclip.options[path] = "/usr/bin" + end + + should "return the expected path for path_for_command" do + assert_equal "/usr/bin/convert", Paperclip.path_for_command("convert") + end + + should "execute the right command" do + Paperclip.expects(:path_for_command).with("convert").returns("/usr/bin/convert") + Paperclip.expects(:bit_bucket).returns("/dev/null") + Paperclip.expects(:"`").with("/usr/bin/convert one.jpg two.jpg 2>/dev/null") + Paperclip.run("convert", "one.jpg two.jpg") + end + end + end + + context "Calling Paperclip.run with no path specified" do + setup do + Paperclip.options[:image_magick_path] = nil + Paperclip.options[:command_path] = nil + end + + should "return the expected path fro path_for_command" do + assert_equal "convert", Paperclip.path_for_command("convert") + end + + should "execute the right command" do + Paperclip.expects(:path_for_command).with("convert").returns("convert") + Paperclip.expects(:bit_bucket).returns("/dev/null") + Paperclip.expects(:"`").with("convert one.jpg two.jpg 2>/dev/null") + Paperclip.run("convert", "one.jpg two.jpg") + end + end + + context "Calling Paperclip.run and logging" do + setup do + Paperclip.options[:image_magick_path] = nil + Paperclip.options[:command_path] = nil + Paperclip.stubs(:bit_bucket).returns("/dev/null") + Paperclip.stubs(:log) + Paperclip.stubs(:"`").with("this is the command 2>/dev/null") + end + + should "log the command when :log_command is true" do + Paperclip.options[:log_command] = true + Paperclip.run("this","is the command") + assert_received(Paperclip, :log) do |p| + p.with("this is the command 2>/dev/null") + end + assert_received(Paperclip, :`) do |p| + p.with("this is the command 2>/dev/null") + end + end + + should "not log the command when :log_command is false" do + Paperclip.options[:log_command] = false + Paperclip.run("this","is the command") + assert_received(Paperclip, :log) do |p| + p.with("this is the command 2>/dev/null").never + end + assert_received(Paperclip, :`) do |p| + p.with("this is the command 2>/dev/null") + end + end + end + + context "Paperclip.bit_bucket" do + context "on systems without /dev/null" do + setup do + File.expects(:exists?).with("/dev/null").returns(false) + end + + should "return 'NUL'" do + assert_equal "NUL", Paperclip.bit_bucket + end + end + + context "on systems with /dev/null" do + setup do + File.expects(:exists?).with("/dev/null").returns(true) + end + + should "return '/dev/null'" do + assert_equal "/dev/null", Paperclip.bit_bucket + end + end + end + + should "raise when sent #processor and the name of a class that exists but isn't a subclass of Processor" do + assert_raises(Paperclip::PaperclipError){ Paperclip.processor(:attachment) } + end + + should "raise when sent #processor and the name of a class that doesn't exist" do + assert_raises(NameError){ Paperclip.processor(:boogey_man) } + end + + should "return a class when sent #processor and the name of a class under Paperclip" do + assert_equal ::Paperclip::Thumbnail, Paperclip.processor(:thumbnail) + end + + context "An ActiveRecord model with an 'avatar' attachment" do + setup do + rebuild_model :path => "tmp/:class/omg/:style.:extension" + @file = File.new(File.join(FIXTURES_DIR, "5k.png"), 'rb') + end + + teardown { @file.close } + + should "not error when trying to also create a 'blah' attachment" do + assert_nothing_raised do + Dummy.class_eval do + has_attached_file :blah + end + end + end + + context "that is attr_protected" do + setup do + Dummy.class_eval do + attr_protected :avatar + end + @dummy = Dummy.new + end + + should "not assign the avatar on mass-set" do + @dummy.attributes = { :other => "I'm set!", + :avatar => @file } + + assert_equal "I'm set!", @dummy.other + assert ! @dummy.avatar? + end + + should "still allow assigment on normal set" do + @dummy.other = "I'm set!" + @dummy.avatar = @file + + assert_equal "I'm set!", @dummy.other + assert @dummy.avatar? + end + end + + context "with a subclass" do + setup do + class ::SubDummy < Dummy; end + end + + should "be able to use the attachment from the subclass" do + assert_nothing_raised do + @subdummy = SubDummy.create(:avatar => @file) + end + end + + should "be able to see the attachment definition from the subclass's class" do + assert_equal "tmp/:class/omg/:style.:extension", + SubDummy.attachment_definitions[:avatar][:path] + end + + teardown do + Object.send(:remove_const, "SubDummy") rescue nil + end + end + + should "have an #avatar method" do + assert Dummy.new.respond_to?(:avatar) + end + + should "have an #avatar= method" do + assert Dummy.new.respond_to?(:avatar=) + end + + context "that is valid" do + setup do + @dummy = Dummy.new + @dummy.avatar = @file + end + + should "be valid" do + assert @dummy.valid? + end + end + + context "a validation with an if guard clause" do + setup do + Dummy.send(:"validates_attachment_presence", :avatar, :if => lambda{|i| i.foo }) + @dummy = Dummy.new + @dummy.stubs(:avatar_file_name).returns(nil) + end + + should "attempt validation if the guard returns true" do + @dummy.expects(:foo).returns(true) + assert ! @dummy.valid? + end + + should "not attempt validation if the guard returns false" do + @dummy.expects(:foo).returns(false) + assert @dummy.valid? + end + end + + context "a validation with an unless guard clause" do + setup do + Dummy.send(:"validates_attachment_presence", :avatar, :unless => lambda{|i| i.foo }) + @dummy = Dummy.new + @dummy.stubs(:avatar_file_name).returns(nil) + end + + should "attempt validation if the guard returns true" do + @dummy.expects(:foo).returns(false) + assert ! @dummy.valid? + end + + should "not attempt validation if the guard returns false" do + @dummy.expects(:foo).returns(true) + assert @dummy.valid? + end + end + + def self.should_validate validation, options, valid_file, invalid_file + context "with #{validation} validation and #{options.inspect} options" do + setup do + Dummy.send(:"validates_attachment_#{validation}", :avatar, options) + @dummy = Dummy.new + end + context "and assigning nil" do + setup do + @dummy.avatar = nil + @dummy.valid? + end + if validation == :presence + should "have an error on the attachment" do + assert @dummy.errors.on(:avatar_file_name) + end + else + should "not have an error on the attachment" do + assert_nil @dummy.errors.on(:avatar_file_name), @dummy.errors.full_messages.join(", ") + end + end + end + context "and assigned a valid file" do + setup do + @dummy.avatar = valid_file + @dummy.valid? + end + should "not have an error when assigned a valid file" do + assert_equal 0, @dummy.errors.length, @dummy.errors.full_messages.join(", ") + end + end + context "and assigned an invalid file" do + setup do + @dummy.avatar = invalid_file + @dummy.valid? + end + should "have an error when assigned a valid file" do + assert @dummy.errors.length > 0 + end + end + end + end + + [[:presence, {}, "5k.png", nil], + [:size, {:in => 1..10240}, "5k.png", "12k.png"], + [:size, {:less_than => 10240}, "5k.png", "12k.png"], + [:size, {:greater_than => 8096}, "12k.png", "5k.png"], + [:content_type, {:content_type => "image/png"}, "5k.png", "text.txt"], + [:content_type, {:content_type => "text/plain"}, "text.txt", "5k.png"], + [:content_type, {:content_type => %r{image/.*}}, "5k.png", "text.txt"]].each do |args| + validation, options, valid_file, invalid_file = args + valid_file &&= File.open(File.join(FIXTURES_DIR, valid_file), "rb") + invalid_file &&= File.open(File.join(FIXTURES_DIR, invalid_file), "rb") + + should_validate validation, options, valid_file, invalid_file + end + + context "with size validation and less_than 10240 option" do + context "and assigned an invalid file" do + setup do + Dummy.send(:"validates_attachment_size", :avatar, :less_than => 10240) + @dummy = Dummy.new + @dummy.avatar &&= File.open(File.join(FIXTURES_DIR, "12k.png"), "rb") + @dummy.valid? + end + + should "have a file size min/max error message" do + assert_match %r/between 0 and 10240 bytes/, @dummy.errors.on(:avatar_file_size) + end + end + end + + end +end diff --git a/online/vendor/plugins/paperclip/test/processor_test.rb b/online/vendor/plugins/paperclip/test/processor_test.rb new file mode 100644 index 0000000..a05f0a9 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/processor_test.rb @@ -0,0 +1,10 @@ +require 'test/helper' + +class ProcessorTest < Test::Unit::TestCase + should "instantiate and call #make when sent #make to the class" do + processor = mock + processor.expects(:make).with() + Paperclip::Processor.expects(:new).with(:one, :two, :three).returns(processor) + Paperclip::Processor.make(:one, :two, :three) + end +end diff --git a/online/vendor/plugins/paperclip/test/storage_test.rb b/online/vendor/plugins/paperclip/test/storage_test.rb new file mode 100644 index 0000000..3bc0025 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/storage_test.rb @@ -0,0 +1,330 @@ +require 'test/helper' +require 'aws/s3' + +class StorageTest < Test::Unit::TestCase + def rails_env(env) + silence_warnings do + Object.const_set(:RAILS_ENV, env) + end + end + + context "Parsing S3 credentials" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :bucket => "testing", + :s3_credentials => {:not => :important} + + @dummy = Dummy.new + @avatar = @dummy.avatar + + @current_env = RAILS_ENV + end + + teardown do + rails_env(@current_env) + end + + should "get the correct credentials when RAILS_ENV is production" do + rails_env("production") + assert_equal({:key => "12345"}, + @avatar.parse_credentials('production' => {:key => '12345'}, + :development => {:key => "54321"})) + end + + should "get the correct credentials when RAILS_ENV is development" do + rails_env("development") + assert_equal({:key => "54321"}, + @avatar.parse_credentials('production' => {:key => '12345'}, + :development => {:key => "54321"})) + end + + should "return the argument if the key does not exist" do + rails_env("not really an env") + assert_equal({:test => "12345"}, @avatar.parse_credentials(:test => "12345")) + end + end + + context "" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :s3_credentials => {}, + :bucket => "bucket", + :path => ":attachment/:basename.:extension", + :url => ":s3_path_url" + @dummy = Dummy.new + @dummy.avatar = StringIO.new(".") + end + + should "return a url based on an S3 path" do + assert_match %r{^http://s3.amazonaws.com/bucket/avatars/stringio.txt}, @dummy.avatar.url + end + end + context "" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :s3_credentials => {}, + :bucket => "bucket", + :path => ":attachment/:basename.:extension", + :url => ":s3_domain_url" + @dummy = Dummy.new + @dummy.avatar = StringIO.new(".") + end + + should "return a url based on an S3 subdomain" do + assert_match %r{^http://bucket.s3.amazonaws.com/avatars/stringio.txt}, @dummy.avatar.url + end + end + context "" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :s3_credentials => { + :production => { :bucket => "prod_bucket" }, + :development => { :bucket => "dev_bucket" } + }, + :s3_host_alias => "something.something.com", + :path => ":attachment/:basename.:extension", + :url => ":s3_alias_url" + @dummy = Dummy.new + @dummy.avatar = StringIO.new(".") + end + + should "return a url based on the host_alias" do + assert_match %r{^http://something.something.com/avatars/stringio.txt}, @dummy.avatar.url + end + end + + context "Generating a url with an expiration" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :s3_credentials => { + :production => { :bucket => "prod_bucket" }, + :development => { :bucket => "dev_bucket" } + }, + :s3_host_alias => "something.something.com", + :path => ":attachment/:basename.:extension", + :url => ":s3_alias_url" + + rails_env("production") + + @dummy = Dummy.new + @dummy.avatar = StringIO.new(".") + + AWS::S3::S3Object.expects(:url_for).with("avatars/stringio.txt", "prod_bucket", { :expires_in => 3600 }) + + @dummy.avatar.expiring_url + end + + should "should succeed" do + assert true + end + end + + context "Parsing S3 credentials with a bucket in them" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :s3_credentials => { + :production => { :bucket => "prod_bucket" }, + :development => { :bucket => "dev_bucket" } + } + @dummy = Dummy.new + @old_env = RAILS_ENV + end + + teardown{ rails_env(@old_env) } + + should "get the right bucket in production" do + rails_env("production") + assert_equal "prod_bucket", @dummy.avatar.bucket_name + end + + should "get the right bucket in development" do + rails_env("development") + assert_equal "dev_bucket", @dummy.avatar.bucket_name + end + end + + context "An attachment with S3 storage" do + setup do + rebuild_model :storage => :s3, + :bucket => "testing", + :path => ":attachment/:style/:basename.:extension", + :s3_credentials => { + 'access_key_id' => "12345", + 'secret_access_key' => "54321" + } + end + + should "be extended by the S3 module" do + assert Dummy.new.avatar.is_a?(Paperclip::Storage::S3) + end + + should "not be extended by the Filesystem module" do + assert ! Dummy.new.avatar.is_a?(Paperclip::Storage::Filesystem) + end + + context "when assigned" do + setup do + @file = File.new(File.join(File.dirname(__FILE__), 'fixtures', '5k.png'), 'rb') + @dummy = Dummy.new + @dummy.avatar = @file + end + + teardown { @file.close } + + should "not get a bucket to get a URL" do + @dummy.avatar.expects(:s3).never + @dummy.avatar.expects(:s3_bucket).never + assert_match %r{^http://s3\.amazonaws\.com/testing/avatars/original/5k\.png}, @dummy.avatar.url + end + + context "and saved" do + setup do + AWS::S3::S3Object.stubs(:store).with(@dummy.avatar.path, anything, 'testing', :content_type => 'image/png', :access => :public_read) + @dummy.save + end + + should "succeed" do + assert true + end + end + + context "and remove" do + setup do + AWS::S3::S3Object.stubs(:exists?).returns(true) + AWS::S3::S3Object.stubs(:delete) + @dummy.destroy_attached_files + end + + should "succeed" do + assert true + end + end + end + end + + context "An attachment with S3 storage and bucket defined as a Proc" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :bucket => lambda { |attachment| "bucket_#{attachment.instance.other}" }, + :s3_credentials => {:not => :important} + end + + should "get the right bucket name" do + assert "bucket_a", Dummy.new(:other => 'a').avatar.bucket_name + assert "bucket_b", Dummy.new(:other => 'b').avatar.bucket_name + end + end + + context "An attachment with S3 storage and specific s3 headers set" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + rebuild_model :storage => :s3, + :bucket => "testing", + :path => ":attachment/:style/:basename.:extension", + :s3_credentials => { + 'access_key_id' => "12345", + 'secret_access_key' => "54321" + }, + :s3_headers => {'Cache-Control' => 'max-age=31557600'} + end + + context "when assigned" do + setup do + @file = File.new(File.join(File.dirname(__FILE__), 'fixtures', '5k.png'), 'rb') + @dummy = Dummy.new + @dummy.avatar = @file + end + + teardown { @file.close } + + context "and saved" do + setup do + AWS::S3::Base.stubs(:establish_connection!) + AWS::S3::S3Object.stubs(:store).with(@dummy.avatar.path, + anything, + 'testing', + :content_type => 'image/png', + :access => :public_read, + 'Cache-Control' => 'max-age=31557600') + @dummy.save + end + + should "succeed" do + assert true + end + end + end + end + + context "with S3 credentials in a YAML file" do + setup do + ENV['S3_KEY'] = 'env_key' + ENV['S3_BUCKET'] = 'env_bucket' + ENV['S3_SECRET'] = 'env_secret' + + rails_env('test') + + rebuild_model :storage => :s3, + :s3_credentials => File.new(File.join(File.dirname(__FILE__), "fixtures/s3.yml")) + + Dummy.delete_all + + @dummy = Dummy.new + end + + should "run it the file through ERB" do + assert_equal 'env_bucket', @dummy.avatar.bucket_name + assert_equal 'env_key', AWS::S3::Base.connection.options[:access_key_id] + assert_equal 'env_secret', AWS::S3::Base.connection.options[:secret_access_key] + end + end + + unless ENV["S3_TEST_BUCKET"].blank? + context "Using S3 for real, an attachment with S3 storage" do + setup do + rebuild_model :styles => { :thumb => "100x100", :square => "32x32#" }, + :storage => :s3, + :bucket => ENV["S3_TEST_BUCKET"], + :path => ":class/:attachment/:id/:style.:extension", + :s3_credentials => File.new(File.join(File.dirname(__FILE__), "s3.yml")) + + Dummy.delete_all + @dummy = Dummy.new + end + + should "be extended by the S3 module" do + assert Dummy.new.avatar.is_a?(Paperclip::Storage::S3) + end + + context "when assigned" do + setup do + @file = File.new(File.join(File.dirname(__FILE__), 'fixtures', '5k.png'), 'rb') + @dummy.avatar = @file + end + + teardown { @file.close } + + should "still return a Tempfile when sent #to_file" do + assert_equal Tempfile, @dummy.avatar.to_file.class + end + + context "and saved" do + setup do + @dummy.save + end + + should "be on S3" do + assert true + end + end + end + end + end +end diff --git a/online/vendor/plugins/paperclip/test/style_test.rb b/online/vendor/plugins/paperclip/test/style_test.rb new file mode 100644 index 0000000..ff1fa56 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/style_test.rb @@ -0,0 +1,141 @@ +# encoding: utf-8 +require 'test/helper' + +class StyleTest < Test::Unit::TestCase + + context "A style rule" do + setup do + @attachment = attachment :path => ":basename.:extension", + :styles => { :foo => {:geometry => "100x100#", :format => :png} } + @style = @attachment.styles[:foo] + end + + should "be held as a Style object" do + assert_kind_of Paperclip::Style, @style + end + + should "get processors from the attachment definition" do + assert_equal [:thumbnail], @style.processors + end + + should "have the right geometry" do + assert_equal "100x100#", @style.geometry + end + + should "be whiny if the attachment is" do + @attachment.expects(:whiny).returns(true) + assert @style.whiny? + end + + should "respond to hash notation" do + assert_equal [:thumbnail], @style[:processors] + assert_equal "100x100#", @style[:geometry] + end + end + + context "A style rule with properties supplied as procs" do + setup do + @attachment = attachment :path => ":basename.:extension", + :whiny_thumbnails => true, + :processors => lambda {|a| [:test]}, + :styles => { + :foo => lambda{|a| "300x300#"}, + :bar => { + :geometry => lambda{|a| "300x300#"} + } + } + end + + should "defer processing of procs until they are needed" do + assert_kind_of Proc, @attachment.styles[:foo].instance_variable_get("@geometry") + assert_kind_of Proc, @attachment.styles[:bar].instance_variable_get("@geometry") + assert_kind_of Proc, @attachment.instance_variable_get("@processors") + end + + should "call procs when they are needed" do + assert_equal "300x300#", @attachment.styles[:foo].geometry + assert_equal "300x300#", @attachment.styles[:bar].geometry + assert_equal [:test], @attachment.styles[:foo].processors + assert_equal [:test], @attachment.styles[:bar].processors + end + end + + context "An attachment with style rules in various forms" do + setup do + @attachment = attachment :path => ":basename.:extension", + :styles => { + :aslist => ["100x100", :png], + :ashash => {:geometry => "100x100", :format => :png}, + :asstring => "100x100" + } + end + should "have the right number of styles" do + assert_kind_of Hash, @attachment.styles + assert_equal 3, @attachment.styles.size + end + + should "have styles as Style objects" do + [:aslist, :ashash, :aslist].each do |s| + assert_kind_of Paperclip::Style, @attachment.styles[s] + end + end + + should "have the right geometries" do + [:aslist, :ashash, :aslist].each do |s| + assert_equal @attachment.styles[s].geometry, "100x100" + end + end + + should "have the right formats" do + assert_equal @attachment.styles[:aslist].format, :png + assert_equal @attachment.styles[:ashash].format, :png + assert_nil @attachment.styles[:asstring].format + end + + end + + context "An attachment with :convert_options" do + setup do + @attachment = attachment :path => ":basename.:extension", + :styles => {:thumb => "100x100", :large => "400x400"}, + :convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"} + @style = @attachment.styles[:thumb] + @file = StringIO.new("...") + @file.stubs(:original_filename).returns("file.jpg") + end + + before_should "not have called extra_options_for(:thumb/:large) on initialization" do + @attachment.expects(:extra_options_for).never + end + + should "call extra_options_for(:thumb/:large) when convert options are requested" do + @attachment.expects(:extra_options_for).with(:thumb) + @attachment.styles[:thumb].convert_options + end + end + + context "A style rule with its own :processors" do + setup do + @attachment = attachment :path => ":basename.:extension", + :styles => { + :foo => { + :geometry => "100x100#", + :format => :png, + :processors => [:test] + } + }, + :processors => [:thumbnail] + @style = @attachment.styles[:foo] + end + + should "not get processors from the attachment" do + @attachment.expects(:processors).never + assert_not_equal [:thumbnail], @style.processors + end + + should "report its own processors" do + assert_equal [:test], @style.processors + end + + end +end diff --git a/online/vendor/plugins/paperclip/test/thumbnail_test.rb b/online/vendor/plugins/paperclip/test/thumbnail_test.rb new file mode 100644 index 0000000..840d329 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/thumbnail_test.rb @@ -0,0 +1,227 @@ +require 'test/helper' + +class ThumbnailTest < Test::Unit::TestCase + + context "A Paperclip Tempfile" do + setup do + @tempfile = Paperclip::Tempfile.new("file.jpg") + end + + should "have its path contain a real extension" do + assert_equal ".jpg", File.extname(@tempfile.path) + end + + should "be a real Tempfile" do + assert @tempfile.is_a?(::Tempfile) + end + end + + context "Another Paperclip Tempfile" do + setup do + @tempfile = Paperclip::Tempfile.new("file") + end + + should "not have an extension if not given one" do + assert_equal "", File.extname(@tempfile.path) + end + + should "still be a real Tempfile" do + assert @tempfile.is_a?(::Tempfile) + end + end + + context "An image" do + setup do + @file = File.new(File.join(File.dirname(__FILE__), "fixtures", "5k.png"), 'rb') + end + + teardown { @file.close } + + [["600x600>", "434x66"], + ["400x400>", "400x61"], + ["32x32<", "434x66"] + ].each do |args| + context "being thumbnailed with a geometry of #{args[0]}" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, :geometry => args[0]) + end + + should "start with dimensions of 434x66" do + cmd = %Q[identify -format "%wx%h" "#{@file.path}"] + assert_equal "434x66", `#{cmd}`.chomp + end + + should "report the correct target geometry" do + assert_equal args[0], @thumb.target_geometry.to_s + end + + context "when made" do + setup do + @thumb_result = @thumb.make + end + + should "be the size we expect it to be" do + cmd = %Q[identify -format "%wx%h" "#{@thumb_result.path}"] + assert_equal args[1], `#{cmd}`.chomp + end + end + end + end + + context "being thumbnailed at 100x50 with cropping" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, :geometry => "100x50#") + end + + should "report its correct current and target geometries" do + assert_equal "100x50#", @thumb.target_geometry.to_s + assert_equal "434x66", @thumb.current_geometry.to_s + end + + should "report its correct format" do + assert_nil @thumb.format + end + + should "have whiny turned on by default" do + assert @thumb.whiny + end + + should "have convert_options set to nil by default" do + assert_equal nil, @thumb.convert_options + end + + should "send the right command to convert when sent #make" do + Paperclip.expects(:"`").with do |arg| + arg.match %r{convert\s+"#{File.expand_path(@thumb.file.path)}\[0\]"\s+-resize\s+\"x50\"\s+-crop\s+\"100x50\+114\+0\"\s+\+repage\s+".*?"} + end + @thumb.make + end + + should "create the thumbnail when sent #make" do + dst = @thumb.make + assert_match /100x50/, `identify "#{dst.path}"` + end + end + + context "being thumbnailed with source file options set" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, + :geometry => "100x50#", + :source_file_options => "-strip") + end + + should "have source_file_options value set" do + assert_equal "-strip", @thumb.source_file_options + end + + should "send the right command to convert when sent #make" do + Paperclip.expects(:"`").with do |arg| + arg.match %r{convert\s+-strip\s+"#{File.expand_path(@thumb.file.path)}\[0\]"\s+-resize\s+"x50"\s+-crop\s+"100x50\+114\+0"\s+\+repage\s+".*?"} + end + @thumb.make + end + + should "create the thumbnail when sent #make" do + dst = @thumb.make + assert_match /100x50/, `identify "#{dst.path}"` + end + + context "redefined to have bad source_file_options setting" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, + :geometry => "100x50#", + :source_file_options => "-this-aint-no-option") + end + + should "error when trying to create the thumbnail" do + assert_raises(Paperclip::PaperclipError) do + @thumb.make + end + end + end + end + + context "being thumbnailed with convert options set" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, + :geometry => "100x50#", + :convert_options => "-strip -depth 8") + end + + should "have convert_options value set" do + assert_equal "-strip -depth 8", @thumb.convert_options + end + + should "send the right command to convert when sent #make" do + Paperclip.expects(:"`").with do |arg| + arg.match %r{convert\s+"#{File.expand_path(@thumb.file.path)}\[0\]"\s+-resize\s+"x50"\s+-crop\s+"100x50\+114\+0"\s+\+repage\s+-strip\s+-depth\s+8\s+".*?"} + end + @thumb.make + end + + should "create the thumbnail when sent #make" do + dst = @thumb.make + assert_match /100x50/, `identify "#{dst.path}"` + end + + context "redefined to have bad convert_options setting" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, + :geometry => "100x50#", + :convert_options => "-this-aint-no-option") + end + + should "error when trying to create the thumbnail" do + assert_raises(Paperclip::PaperclipError) do + @thumb.make + end + end + end + end + + context "being thumbnailed with a blank geometry string" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, + :geometry => "", + :convert_options => "-gravity center -crop \"300x300+0-0\"") + end + + should "not get resized by default" do + assert_no_match(/-resize/, @thumb.transformation_command) + end + end + end + + context "A multipage PDF" do + setup do + @file = File.new(File.join(File.dirname(__FILE__), "fixtures", "twopage.pdf"), 'rb') + end + + teardown { @file.close } + + should "start with two pages with dimensions 612x792" do + cmd = %Q[identify -format "%wx%h" "#{@file.path}"] + assert_equal "612x792"*2, `#{cmd}`.chomp + end + + context "being thumbnailed at 100x100 with cropping" do + setup do + @thumb = Paperclip::Thumbnail.new(@file, :geometry => "100x100#", :format => :png) + end + + should "report its correct current and target geometries" do + assert_equal "100x100#", @thumb.target_geometry.to_s + assert_equal "612x792", @thumb.current_geometry.to_s + end + + should "report its correct format" do + assert_equal :png, @thumb.format + end + + should "create the thumbnail when sent #make" do + dst = @thumb.make + assert_match /100x100/, `identify "#{dst.path}"` + end + end + end +end diff --git a/online/vendor/plugins/paperclip/test/upfile_test.rb b/online/vendor/plugins/paperclip/test/upfile_test.rb new file mode 100644 index 0000000..085a0c7 --- /dev/null +++ b/online/vendor/plugins/paperclip/test/upfile_test.rb @@ -0,0 +1,36 @@ +require 'test/helper' + +class UpfileTest < Test::Unit::TestCase + { %w(jpg jpe jpeg) => 'image/jpeg', + %w(tif tiff) => 'image/tiff', + %w(png) => 'image/png', + %w(gif) => 'image/gif', + %w(bmp) => 'image/bmp', + %w(txt) => 'text/plain', + %w(htm html) => 'text/html', + %w(csv) => 'text/csv', + %w(xml) => 'text/xml', + %w(css) => 'text/css', + %w(js) => 'application/js', + %w(foo) => 'application/x-foo' + }.each do |extensions, content_type| + extensions.each do |extension| + should "return a content_type of #{content_type} for a file with extension .#{extension}" do + file = stub('file', :path => "basename.#{extension}") + class << file + include Paperclip::Upfile + end + + assert_equal content_type, file.content_type + end + + should "return a content_type of text/plain on a real file whose content_type is determined with the file command" do + file = File.new(File.join(File.dirname(__FILE__), "..", "LICENSE")) + class << file + include Paperclip::Upfile + end + assert_equal 'text/plain', file.content_type + end + end + end +end -- 2.11.4.GIT