From c3c5899b060d40f867d266f58ebfa207c46d3680 Mon Sep 17 00:00:00 2001 From: Remco Tolsma Date: Tue, 9 Sep 2014 10:00:40 +0200 Subject: [PATCH] Updated from 1.8.9 to 1.8.13. --- change_log.txt | 116 ++ common.php | 228 ++- css/admin.css | 3 + css/formsmain.css | 782 ++++---- entry_detail.php | 2021 +++++++++++---------- export.php | 16 +- form_display.php | 115 +- form_settings.php | 5 +- forms_model.php | 73 +- gravityforms.php | 33 +- images/chosen-sprite.png | Bin 742 -> 646 bytes images/chosen-sprite@2x.png | Bin 0 -> 872 bytes includes/addon/class-gf-addon.php | 232 ++- includes/addon/class-gf-feed-addon.php | 63 +- includes/addon/class-gf-payment-addon.php | 500 +++-- includes/api.php | 27 + includes/upload.php | 14 + includes/webapi/webapi.php | 4 +- js/chosen.jquery.min.js | 12 +- js/conditional_logic.js | 75 +- js/form_admin.js | 44 +- js/gravityforms.js | 17 +- languages/gravityforms-fi.mo | Bin 51856 -> 163843 bytes languages/gravityforms-fr_FR.mo | Bin 125784 -> 172778 bytes notification.php | 11 +- select_columns.php | 4 +- settings.php | 4 +- 27 files changed, 2503 insertions(+), 1896 deletions(-) create mode 100644 images/chosen-sprite@2x.png diff --git a/change_log.txt b/change_log.txt index 2ff0fef..5ff17a9 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,3 +1,119 @@ +------------------------------------------------------------------------------------------------------------------- +Version 1.8.13 + - Added additional check plus user feedback for failed multi-file uploads. + - Fixed a potential security vulnerability for some server configurations which could allow code to be executed via the file upload field. + - Fixed issue with form export/import setting inactive notifications to active. + - Fixed issue with resend notification not accepting a list of emails. + - Fixed another issue with field label for Name and Address fields. + - Fixed issue with field label for Name and Address fields. + - Fixed issue causing checkboxes checked by default to be rendered unchecked in certain situations. + + - AF: Fixed another issue with simple_condition() function/feature creating javascript errors. + - AF: Fixed get_field_map_fields function to no longer include the text "field_map" in the mapped fields prefix. + - AF: Fixed issue with payments less than $1.00 not being processed. + +------------------------------------------------------------------------------------------------------------------- +Version 1.8.12 + - Added PHP version of the "gform_calculation_result" filter. + add_filter( 'gform_calculation_result', 'my_calc_result', 10, 5 ); + function my_calc_result( $result, $formula, $field, $form, $entry ) { + // modify result as needed + return $result; + } + - Updated chosen js, styles and images to latest version. + - Fixed issue with multiple file upload merge tag not including a line break when in html format. + - Fixed issue with List field markup; more than . + - Fixed markup validation issue with List Field where label for attribute did not match a valid input. + - AF: Fixed issue with simple_condition() function/feature creating javascript errors. + - AF: Added a check in the maybe_process_callback function to see if the callback has been aborted to prevent processing for the Payment Add-On. + - API: Added GFAPI::get_forms() method. + +------------------------------------------------------------------------------------------------------------------- +Version 1.8.11 + + - Fixed issue where tags were closed incorrectly generating invalid HTML markup. + - Fixed issue with notifications not being sent when configured with multiple email addresses. + - Fixed issue with legacy notifications getting marked as inactive after being edited. + +------------------------------------------------------------------------------------------------------------------- +Version 1.8.10 + + - Added gform_enable_shortcode_notification_message hook to allow for disabling shortcode processing of notification messages. + - Added $field_values as a third paramater for the gform_pre_render filter. + - Added new hook: 'gform_send_email_failed'; allows interception when a call to GFCommon::send_email() fails. + add_action( 'gform_send_email_failed', 'my_send_email_failed_func', 10, 2 ); + function my_send_email_failed_func( $error, $email ) { + // do what you want with the $error and $email data. + } + - Added new JS filter: 'gform_calculation_formula' to allow modifying formula before it is processed by GF on frontend. + gform.addFilter( 'gform_calculation_formula', function( formula, formulaField, formId, calcObj ) { + // custom code here + return formula; + } ); + - Added $rule and $form parameters to the gform_is_value_match filter. + - Added GFCommon::esc_like() method to fix deprecation notice in WP 4.0 while maintining backwards compatibility with previous WP versions. + - Added condition to not include "gform_chosen" if "chosen" is already enqueued. + + - Updated gf_reset_to_default() to not select disabled options in drop downs when reseting default value. + - Updated GCommon::is_valid_url() to use filter_var( $url, FILTER_VALIDATE_URL ). + - Updated GCommon::is_valid_email() to use filter_var( $email, FILTER_VALIDATE_EMAIL ). + - Updated entry details payment information markup. + - Updated complete_payment function to update the entry's payment_amount, transaction_id, and payment_date for the Payment Add-On. + - Updated process for enqueuing chosen script to check if "chosen" is a registered handle and if so to include it instead of "gform_chosen". + - Updated french translation. + - Updated product calculation field to allow the label to be changed dynamically like the single product field. + - Updated delete_leads_by_form function to include deleting data from the lead meta table. + + - API: Updated GFAPI::get_entries() to include field choice texts in addition to values when performing a global search. + + - Fixed fatal error triggered on some servers. + - Fixed Notice message. + - Fixed an issue with multi-page, ajax-enabled forms with images as buttons where multiple spinners were displayed during form submission. + - Fixed issue with multi file upload merge tag. + - Fixed issue with confirmation type "Page" when permalink contains a query string. + - Fixed bug with default values for conditional logic where any choice with a 'price' attr set (even if it wasn't a pricing field) was incorrectly treated as a pricing value. + - Fixed a issue with GFCommon::esc_like() causing a fatal error on WordPress < 4.0. + - Fixed an issue with checkbox, radio button and drop-down fields which caused data to be saved incorrectly if a pipe ("|") was used in a choice value. + - Fixed the validation of the website field to accept commas in the path. + - Fixed notices thrown in WP 4.0 on pages using/extending WP_List_Table. + - Fixed an issue affecting the search function on the entry list and the conditional logic on the entry export page where field choice values would be taken into account but not their corresponding texts/labels while performing a global search based on any form field. This affects all radio, checkbox and drop-down fields plus derivative fields in add-ons i.e. Poll, Survey and Quiz fields. + - Fixed a bug with conditional logic animation in Firefox. + - Fixed "Index too large" error for payment addons. + - Fixed issue with inactive notifications getting changed back to active when notification is edited. + - Fixed issue where admin label was not used for fields in the inactive column on the "Select Columns" ui. + - Fixed issue where is_section_empty() returned true even if section contained a product field and 'gform_display_product_summary' filter returned false. + - Fixed issue where
tags were being displayed on notifications even when the message type was set to "text". + - Fixed notice thrown in update_confirmation function when isDefault not set. + - Fixed warnings thrown in get_version_info when the response is not an array. + + - AF: Fixed issue with sales page where payment method drop down displayed blank values. + - AF: Fixed issue when creating subscriptions upon first subscription payment. + - AF: Fixed issue with payment going to gateway when the amount was negative. + - AF: Updated payment Add-On so that redirect_url() is called earlier in the page life-cycle. + - AF: Fixed issue with results page displaying an error message for the Stripe Add-On. + - AF: Added support for checkbox item callback to allow an individual checkbox item to be customized. + - AF: Fixed issue that caused a $0.00 total when selecting the same product field for the subscription payment and trial payment. + - AF: Fixed issue with plugin settings page displaying slug instead of Title. + - AF: Fixed issue with payment add-on sending requests to payment gateways even when payment was $0.00. + - AF: Updated process_capture function to set is_fulfilled to true so complete_payment function uses the entry value for Payment Add-On. + - AF: Updated maybe_process_feed function to handle delayed payments for the Payment Add-On. + - AF: Added support for formatting inputs as currency. + - AF: Fixed notice thrown in the process_callback_action function when logging for the Payment Add-On. + - AF: Updated maybe_process_feeds function to not process feeds set as inactive. + - AF: Added register and init_addons() function to allow for aid in initializing addons and support overriding them. + - AF: Updated process_capture function in the Payment Add-on to call complete_payment. + - AF: Updated Payment AF validation to only validate if the validation result is valid. + - AF: Fixed misspelling on database key in create table for ...gf_addon_payment_transaction for the Payment Add-On. + - AF: Updated confirmation function to set the transaction type on the entry for payment gateways that redirect to a url for the Payment Add-On. + - AF: Added code to update the payment_gateway meta for the entry when the gateway is a URL redirect for the Payment Add-On. + - AF: Fixed notices thrown in the complete_payment function in the Payment Add-On. + - AF: Updated priority of Payment AF validation from 10 to 20 to ensure all validation has passed before payment validation occurs (resolves issue where validation could sometimes fail AFTER a subscription was created). + - AF: Fixed issue where "name" attribute was output twice. + - AF: Updated 'name' property of plugin settings tabs to use slug rather than short title. + - AF: Fixed issue where feed status was not saved. + - AF: Added a post_callback function to the Payment Add-On. + - AF: Added tooltips to the Payment Add-On. + ------------------------------------------------------------------------------------------------------------------- Version 1.8.9 - Added "password" to the list of fields which allow HTML input. diff --git a/common.php b/common.php index ce5aea1..70a630a 100644 --- a/common.php +++ b/common.php @@ -220,13 +220,31 @@ public static function is_invalid_or_empty_email($email){ return empty($email) || !self::is_valid_email($email); } - public static function is_valid_url($url){ - return preg_match('!^(http|https)://([\w-]+\.?)+[\w-]+(:\d+)?(/[\w- ./?~%&=+\']*)?$!', $url); - } + public static function is_valid_url( $url ) { + $url = trim( $url ); - public static function is_valid_email($email){ - return preg_match('/^(([a-zA-Z0-9_.\-+!#$&\'*+=?^`{|}~])+\@((([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+|localhost) *,? *)+$/', $email); - } + return ( ( strpos( $url, 'http://' ) === 0 || strpos( $url, 'https://' ) === 0 ) && + filter_var( $url, FILTER_VALIDATE_URL ) !== false ); + } + + public static function is_valid_email( $email ) { + return filter_var( $email, FILTER_VALIDATE_EMAIL ); + } + + public static function is_valid_email_list( $email_list ) { + $emails = explode( ',', $email_list ); + if ( ! is_array( $emails ) ){ + return false; + } + + foreach( $emails as $email ){ + if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { + return false; + } + } + + return true; + } public static function get_label($field, $input_id = 0, $input_only = false){ return RGFormsModel::get_label($field, $input_id, $input_only); @@ -694,17 +712,25 @@ public static function replace_variables($text, $form, $lead, $url_encode = fals case "fileupload" : if(rgar($field, "multipleFiles")){ - $files = empty($value) ? array() : json_decode($value, true); - foreach($files as &$file){ - $file = str_replace(" ", "%20", $file); - } - $value = join("\r\n", $files); - if($format == "html"){ - $value = nl2br($value); - } - } else { - $value = str_replace(" ", "%20", $value); - } + + $files = empty( $raw_value ) ? array() : json_decode( $raw_value, true ); + foreach ( $files as &$file ) { + + $file = str_replace( ' ', '%20', $file ); + + if ( $esc_html ){ + $value = esc_html( $value ); + } + } + $value = $format == 'html' ? join( "
", $files ) : join( ", ", $files ); + + } else { + $value = str_replace( ' ', '%20', $value ); + } + + if ( $url_encode ){ + $value = urlencode( $value ); + } break; @@ -872,14 +898,14 @@ public static function replace_variables($text, $form, $lead, $url_encode = fals $text = str_replace("{entry_url}", $url_encode ? urlencode($entry_url) : $entry_url, $text); //post id - $text = str_replace("{post_id}", $url_encode ? urlencode($lead["post_id"]) : $lead["post_id"], $text); + $text = str_replace("{post_id}", $url_encode ? urlencode(rgar($lead, "post_id")) : rgar($lead, "post_id"), $text); //admin email $wp_email = get_bloginfo("admin_email"); $text = str_replace("{admin_email}", $url_encode ? urlencode($wp_email) : $wp_email, $text); //post edit url - $post_url = get_bloginfo("wpurl") . "/wp-admin/post.php?action=edit&post=" . $lead["post_id"]; + $post_url = get_bloginfo("wpurl") . "/wp-admin/post.php?action=edit&post=" . rgar($lead, "post_id"); $text = str_replace("{post_edit_url}", $url_encode ? urlencode($post_url) : $post_url, $text); $text = self::replace_variables_prepopulate($text, $url_encode); @@ -1282,7 +1308,10 @@ private static function prepare_user_notification($form, $lead, $override_option $message_format = apply_filters("gform_notification_format_{$form["id"]}", apply_filters("gform_notification_format", "html", "user", $form, $lead), "user", $form, $lead); $message = GFCommon::replace_variables(rgget("message", $form["autoResponder"]), $form, $lead, false, false, !rgget("disableAutoformat", $form["autoResponder"]), $message_format); - $message = do_shortcode($message); + + if(apply_filters("gform_enable_shortcode_notification_message", true, $form, $lead)){ + $message = do_shortcode($message); + } //Running trough variable replacement $to = GFCommon::replace_variables($to, $form, $lead, false, false); @@ -1314,7 +1343,10 @@ private static function prepare_admin_notification($form, $lead, $override_optio $message_format = apply_filters("gform_notification_format_{$form["id"]}", apply_filters("gform_notification_format", "html", "admin", $form, $lead), "admin", $form, $lead); $message = GFCommon::replace_variables(rgget("message", $form["notification"]), $form, $lead, false, false, !rgget("disableAutoformat", $form["notification"]), $message_format); - $message = do_shortcode($message); + + if(apply_filters("gform_enable_shortcode_notification_message", true, $form, $lead)){ + $message = do_shortcode($message); + } $version_info = self::get_version_info(); $is_expired = !rgempty("expiration_time", $version_info) && $version_info["expiration_time"] < time(); @@ -1344,7 +1376,7 @@ private static function prepare_admin_notification($form, $lead, $override_optio $source_field = RGFormsModel::get_field($form, $routing["fieldId"]); $field_value = RGFormsModel::get_lead_field_value($lead, $source_field); - $is_value_match = RGFormsModel::is_value_match($field_value, $routing["value"], $routing["operator"], $source_field) && !RGFormsModel::is_field_hidden($form, $source_field, array(), $lead); + $is_value_match = RGFormsModel::is_value_match( $field_value, $routing["value"], $routing["operator"], $source_field, $routing, $form ) && !RGFormsModel::is_field_hidden($form, $source_field, array(), $lead); if ($is_value_match) $email_to[] = $routing["email"]; @@ -1399,7 +1431,7 @@ public static function send_notification($notification, $form, $lead){ $source_field = RGFormsModel::get_field($form, $routing["fieldId"]); $field_value = RGFormsModel::get_lead_field_value($lead, $source_field); - $is_value_match = RGFormsModel::is_value_match($field_value, $routing["value"], $routing["operator"], $source_field) && !RGFormsModel::is_field_hidden($form, $source_field, array(), $lead); + $is_value_match = RGFormsModel::is_value_match($field_value, $routing["value"], $routing["operator"], $source_field, $routing, $form ) && !RGFormsModel::is_field_hidden($form, $source_field, array(), $lead); if ($is_value_match) $email_to[] = $routing["email"]; @@ -1422,7 +1454,10 @@ public static function send_notification($notification, $form, $lead){ $message_format = rgempty("message_format", $notification) ? "html" : rgar($notification, "message_format"); $message = GFCommon::replace_variables(rgar($notification, "message"), $form, $lead, false, false, !rgar($notification, "disableAutoformat"), $message_format); - $message = do_shortcode($message); + + if(apply_filters("gform_enable_shortcode_notification_message", true, $form, $lead)){ + $message = do_shortcode($message); + } // allow attachments to be passed as a single path (string) or an array of paths, if string provided, add to array $attachments = rgar( $notification, "attachments" ); @@ -1559,28 +1594,30 @@ public static function has_user_notification($form){ private static function send_email($from, $to, $bcc, $reply_to, $subject, $message, $from_name="", $message_format="html", $attachments=""){ - $to = str_replace(" ", "", $to); - $bcc = str_replace(" ", "", $bcc); + $to = str_replace( " ", "", $to ); + $bcc = str_replace( " ", "", $bcc ); + $error = false; - //invalid to email address or no content. can't send email - if(!GFCommon::is_valid_email($to) || (empty($subject) && empty($message))){ - GFCommon::log_debug("Cannot send email because either the TO address is invalid or there is no SUBJECT or MESSAGE."); - GFCommon::log_debug(print_r(compact("to", "subject", "message"), true)); - return; - } + if( ! GFCommon::is_valid_email( $from ) ) { + $from = get_bloginfo( 'admin_email' ); + } - if(!GFCommon::is_valid_email($from)) - $from = get_bloginfo("admin_email"); + if( ! GFCommon::is_valid_email_list( $to ) ) { + $error = new WP_Error( 'invalid_to', 'Cannot send email because the TO address is invalid.' ); + } else if( empty( $subject ) && empty( $message ) ) { + $error = new WP_Error( 'missing_subject_and_message', 'Cannot send email because there is no SUBJECT and no MESSAGE.' ); + } else if( ! GFCommon::is_valid_email( $from ) ) { + $error = new WP_Error( 'invalid_from', 'Cannot send email because the FROM address is invalid.' ); + } - //invalid from address. can't send email - if(!GFCommon::is_valid_email($from)){ - GFCommon::log_debug("Cannot send email because the FROM address is invalid."); - GFCommon::log_debug(print_r(compact("to", "from", "subject"), true)); + if( is_wp_error( $error ) ) { + GFCommon::log_debug( $error->get_error_message() ); + GFCommon::log_debug( print_r( compact( 'to', 'subject', 'message' ), true ) ); + do_action( 'gform_send_email_failed', $error, compact( 'from', 'to', 'bcc', 'reply_to', 'subject', 'message', 'from_name', 'message_format', 'attachments' ) ); return; - } + } $content_type = $message_format == "html" ? "text/html" : "text/plain"; - $name = empty($from_name) ? $from : $from_name; $headers = array(); @@ -1589,7 +1626,7 @@ private static function send_email($from, $to, $bcc, $reply_to, $subject, $messa if(GFCommon::is_valid_email($reply_to)) $headers["Reply-To"] = "Reply-To: {$reply_to}"; - if(GFCommon::is_valid_email($bcc)) + if(GFCommon::is_valid_email_list($bcc)) $headers["Bcc"] = "Bcc: $bcc"; $headers["Content-type"] = "Content-type: {$content_type}; charset=" . get_option('blog_charset'); @@ -1801,15 +1838,16 @@ public static function get_version_info($cache=true){ $options['timeout'] = 15; $nocache = $cache ? "" : "nocache=1"; //disabling server side caching - + $raw_response = self::post_to_manager("version.php", $nocache, $options); //caching responses. set_transient("gform_update_info", $raw_response, 86400); //caching for 24 hours } - if ( is_wp_error( $raw_response ) || $raw_response['response']['code'] != 200 ) + if ( is_wp_error( $raw_response ) || rgars($raw_response, 'response/code') != 200 ) { return array("is_valid_key" => "1", "version" => "", "url" => "", "is_error" => "1"); + } $version_info = json_decode($raw_response['body'], true); @@ -1994,9 +2032,14 @@ public static function selection_display($value, $field, $currency="", $use_text return ""; } - $ary = explode("|", $value); - $val = $ary[0]; - $price = count($ary) > 1 ? $ary[1] : ""; + if ( isset( $field['enablePrice'] ) && $field['enablePrice'] ) { + $ary = explode( '|', $value ); + $val = $ary[0]; + $price = count( $ary ) > 1 ? $ary[1] : ''; + } else { + $val = $value; + $price = ''; + } if($use_text) $val = RGFormsModel::get_choice_text($field, $val); @@ -2350,31 +2393,48 @@ public static function get_select_choices($field, $value=""){ return $choices; } - public static function is_section_empty($section_field, $form, $lead){ - $cache_key = "GFCommon::is_section_empty_" . $form["id"] . "_" . $section_field["id"]; + public static function is_section_empty( $section_field, $form, $entry ) { - $value = GFCache::get($cache_key); + $cache_key = "GFCommon::is_section_empty_{$form['id']}_{$section_field['id']}"; + $value = GFCache::get( $cache_key ); - if($value !== false) + if( $value !== false ) { return $value == true; + } - $fields = self::get_section_fields($form, $section_field["id"]); - if(!is_array($fields)){ - GFCache::set($cache_key, 1); + $fields = self::get_section_fields( $form, $section_field['id'] ); + if( ! is_array( $fields ) ) { + GFCache::set( $cache_key, 1 ); return true; } - foreach($fields as $field){ - $val = RGFormsModel::get_lead_field_value($lead, $field); - $val = GFCommon::get_lead_field_display($field, $val, rgar($lead, 'currency')); + foreach( $fields as $field ) { + + $value = GFFormsModel::get_lead_field_value( $entry, $field ); + $value = GFCommon::get_lead_field_display( $field, $value, rgar( $entry, 'currency' ) ); + + if( rgblank( $value ) ) { + continue; + } + + // most fields are displayed in the section by default, exceptions are handled below + $is_field_displayed_in_section = true; - if(!self::is_product_field($field["type"]) && !rgblank($val)){ - GFCache::set($cache_key, 0); + // by default, product fields are not displayed in their containing section (displayed in a product summary table) + // if the filter is used to disable this, product fields are displayed in the section like other fields + if( self::is_product_field( $field['type'] ) ) { + $display_product_summary = apply_filters( 'gform_display_product_summary', true, $field, $form, $entry ); + $is_field_displayed_in_section = ! $display_product_summary; + } + + if( $is_field_displayed_in_section ) { + GFCache::set( $cache_key, 0 ); return false; } + } - GFCache::set($cache_key, 1); + GFCache::set( $cache_key, 1 ); return true; } @@ -3861,21 +3921,21 @@ public static function get_field_input($field, $value="", $lead_id=0, $form_id=0 $has_columns = is_array(rgar($field, "choices")); $columns = $has_columns ? rgar($field, "choices") : array(array()); + $label_target_shim = sprintf( '', $form_id, $field['id'] ); $list = "
" . + $label_target_shim . ""; $class_attr = ""; if($has_columns){ - $list .= ""; - $colnum = 1; - foreach($columns as $column){ - $odd_even = ($colnum % 2) == 0 ? "even" : "odd"; - $list .= ""; - $colnum++; + $list .= ''; + for( $colnum = 1; $colnum <= count( $columns ) + 1; $colnum++ ) { + $odd_even = ( $colnum % 2 ) == 0 ? 'even' : 'odd'; + $list .= sprintf( "", $field['id'], $colnum, $odd_even ); } - $list .= ""; + $list .= ''; $list .= ""; foreach($columns as $column){ @@ -3884,7 +3944,11 @@ public static function get_field_input($field, $value="", $lead_id=0, $form_id=0 $list .= ""; } else{ - $list .= ""; + $list .= + '' . + "" . + "" . + ''; } $delete_display = count($value) == 1 ? "visibility:hidden;" : ""; @@ -4044,9 +4108,9 @@ private static function get_list_input($field, $has_columns, $column, $value, $f foreach($input_info["choices"] as $choice){ if(is_array($choice)){ - $choice_value = $choice["value"]; - $choice_text = $choice["text"]; - $choice_selected = $choice["isSelected"]; + $choice_value = rgar($choice,"value"); + $choice_text = rgar($choice,"text"); + $choice_selected = rgar($choice,"isSelected"); } else{ $choice_value = $choice; @@ -4081,7 +4145,7 @@ public static function clean_extensions($extensions){ } public static function get_disallowed_file_extensions(){ - return array("php", "asp", "exe", "com", "htaccess"); + return array("php", "asp", "exe", "com", "htaccess", "phtml", "php3", "php4", "php5", "php6"); } public static function to_money($number, $currency_code=""){ @@ -4665,9 +4729,8 @@ public static function get_lead_field_display($field, $value, $currency="", $use break; default : - if (!is_array($value)) - { - return nl2br($value); + if (!is_array($value)){ + return $format == "html" ? nl2br($value) : $value; } break; } @@ -4991,11 +5054,11 @@ public static function evaluate_conditional_logic($logic, $form, $lead) { foreach($logic["rules"] as $rule) { if (in_array($rule["fieldId"], $entry_meta_keys)){ - $is_value_match = GFFormsModel::is_value_match(rgar($lead,$rule["fieldId"]), $rule["value"], $rule["operator"]);; + $is_value_match = GFFormsModel::is_value_match(rgar($lead,$rule["fieldId"]), $rule["value"], $rule["operator"], null, $rule, $form ); } else { $source_field = GFFormsModel::get_field($form, $rule["fieldId"]); $field_value = empty($lead) ? GFFormsModel::get_field_value($source_field, array()) : GFFormsModel::get_lead_field_value($lead, $source_field); - $is_value_match = GFFormsModel::is_value_match($field_value, $rule["value"], $rule["operator"], $source_field); + $is_value_match = GFFormsModel::is_value_match( $field_value, $rule["value"], $rule["operator"], $source_field, $rule, $form ); } if($is_value_match) @@ -5269,6 +5332,7 @@ public static function calculate($field, $form, $lead) { } $result = preg_match( '/^[0-9 -\/*\(\)]+$/', $formula ) ? eval( "return {$formula};" ) : false; + $result = apply_filters( 'gform_calculation_result', $result, $formula, $field, $form, $lead ); return $result; } @@ -5869,6 +5933,18 @@ public static function decrypt( $text ) { return trim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $key, base64_decode( $text ), MCRYPT_MODE_ECB, mcrypt_create_iv( $iv_size, MCRYPT_RAND ) ) ); } + public static function esc_like( $value ) { + global $wpdb; + + if( is_callable( array( $wpdb, 'esc_like' ) ) ) { + $value = $wpdb->esc_like( $value ); + } else { + $value = like_escape( $value ); + } + + return $value; + } + } class GFCategoryWalker extends Walker { diff --git a/css/admin.css b/css/admin.css index 0f2fe3c..efa6d75 100644 --- a/css/admin.css +++ b/css/admin.css @@ -1305,6 +1305,9 @@ table td.gfield_category_cell { } /* view form styles ------------------------------------------------------*/ +div.gf_payment_detail{ + margin-bottom: 15px; +} table.entry-detail-view { margin-bottom: 16px diff --git a/css/formsmain.css b/css/formsmain.css index abd14b5..841111d 100644 --- a/css/formsmain.css +++ b/css/formsmain.css @@ -1288,408 +1288,400 @@ body .gform_wrapper div.gform_body ul.gform_fields li.gfield.gfield_html dl dd { min-width: 45px !important; } -/* enhanced UI/select styles added in v.1.6 -----------------------------------------------------------------*/ - - -.gform_wrapper select.chzn-select { - visibility: hidden; - height: 28px !important; - min-height: 28px !important; -} - -.gform_wrapper .chzn-container { - font-size: 13px; - position: relative; - margin-bottom: 4px; - display: inline-block; - zoom: 1; -} - -.gform_wrapper .chzn-container .chzn-drop { - background-color: #FFF; - border: 1px solid #AAA; - border-top: 0; - position: absolute; - top: 29px; - left: 0; - -webkit-box-shadow: 0 4px 5px rgba(0,0,0,.15); - -moz-box-shadow: 0 4px 5px rgba(0,0,0,.15); - -o-box-shadow: 0 4px 5px rgba(0,0,0,.15); - box-shadow: 0 4px 5px rgba(0,0,0,.15); - z-index: 999; -} - -.gform_wrapper .chzn-container-single .chzn-single { - background-color: #FFF; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #EEE), color-stop(0.5, white)); - background-image: -webkit-linear-gradient(center bottom, #EEE 0%, white 50%); - background-image: -moz-linear-gradient(center bottom, #EEE 0%, white 50%); - background-image: -o-linear-gradient(top, #EEE 0%,#FFF 50%); - background-image: -ms-linear-gradient(top, #EEE 0%,#FFF 50%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#EEE', endColorstr='#FFF',GradientType=0 ); - background-image: linear-gradient(top, #EEE 0%,#FFF 50%); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #AAA; - display: block; overflow: hidden; - white-space: nowrap; - position: relative; - height: 26px; - line-height: 26px; - padding: 0 0 0 8px; - color: #444; - text-decoration: none; +/* enhanced UI/select styles updated in v.1.8.12 -----------------------------------------------------------------*/ + + +.gform_wrapper .chosen-container { + position: relative; + display: inline-block; + vertical-align: middle; + font-size: 13px; + zoom: 1; + *display: inline; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.gform_wrapper .chosen-container .chosen-drop { + position: absolute; + top: 100%; + left: -9999px; + z-index: 1010; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + border: 1px solid #aaa; + border-top: 0; + background: #fff; + box-shadow: 0 4px 5px rgba(0, 0, 0, .15); +} +.gform_wrapper .chosen-container.chosen-with-drop .chosen-drop { + left: 0; +} +.gform_wrapper .chosen-container a { + cursor: pointer; +} +.gform_wrapper .chosen-container-single .chosen-single { + position: relative; + display: block; + overflow: hidden; + padding: 0 0 0 8px; + height: 23px; + border: 1px solid #aaa; + border-radius: 5px; + background-color: #fff; + background: -webkit-gradient(linear, 50% 0, 50% 100%, color-stop(20%, #fff), color-stop(50%, #f6f6f6), color-stop(52%, #eee), color-stop(100%, #f4f4f4)); + background: -webkit-linear-gradient(top, #fff 20%, #f6f6f6 50%, #eee 52%, #f4f4f4 100%); + background: -moz-linear-gradient(top, #fff 20%, #f6f6f6 50%, #eee 52%, #f4f4f4 100%); + background: -o-linear-gradient(top, #fff 20%, #f6f6f6 50%, #eee 52%, #f4f4f4 100%); + background: linear-gradient(top, #fff 20%, #f6f6f6 50%, #eee 52%, #f4f4f4 100%); + background-clip: padding-box; + box-shadow: 0 0 3px #fff inset, 0 1px 1px rgba(0, 0, 0, .1); + color: #444; + text-decoration: none; + white-space: nowrap; + line-height: 24px; +} +.gform_wrapper .chosen-container-single .chosen-default { + color: #999; +} +.gform_wrapper .chosen-container-single .chosen-single span { + display: block; + overflow: hidden; + margin-right: 26px; + text-overflow: ellipsis; + white-space: nowrap; +} +.gform_wrapper .chosen-container-single .chosen-single-with-deselect span { + margin-right: 38px; +} +.gform_wrapper .chosen-container-single .chosen-single abbr { + position: absolute; + top: 6px; + right: 26px; + display: block; + width: 12px; + height: 12px; + background: url(../images/chosen-sprite.png) -42px 1px no-repeat; + font-size: 1px; +} +.gform_wrapper .chosen-container-single .chosen-single abbr:hover { + background-position: -42px -10px; +} +.gform_wrapper .chosen-container-single.chosen-disabled .chosen-single abbr:hover { + background-position: -42px -10px; +} +.gform_wrapper .chosen-container-single .chosen-single div { + position: absolute; + top: 0; + right: 0; + display: block; + width: 18px; + height: 100%} +.gform_wrapper .chosen-container-single .chosen-single div b { + display: block; + width: 100%; + height: 100%; + background: url(../images/chosen-sprite.png) no-repeat 0 2px; +} +.gform_wrapper .chosen-container-single .chosen-search { + position: relative; + z-index: 1010; + margin: 0; + padding: 3px 4px; + white-space: nowrap; +} +.gform_wrapper .chosen-container-single .chosen-search input[type=text] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 1px 0; + padding: 4px 20px 4px 5px; + width: 100%; + height: auto; + outline: 0; + border: 1px solid #aaa; + background: #fff url(../images/chosen-sprite.png) no-repeat 100% -20px; + background: url(../images/chosen-sprite.png) no-repeat 100% -20px; + font-size: 1em; + font-family: sans-serif; + line-height: normal; + border-radius: 0; +} +.gform_wrapper .chosen-container-single .chosen-drop { + margin-top: -1px; + border-radius: 0 0 4px 4px; + background-clip: padding-box; +} +.gform_wrapper .chosen-container-single.chosen-container-single-nosearch .chosen-search { + position: absolute; + left: -9999px; +} +.gform_wrapper .chosen-container .chosen-results { + position: relative; + overflow-x: hidden; + overflow-y: auto; + margin: 0 4px 4px 0; + padding: 0 0 0 4px; + max-height: 240px; + -webkit-overflow-scrolling: touch; +} +.gform_wrapper .chosen-container .chosen-results li { + display: none; + margin: 0; + padding: 5px 6px; + list-style: none; + line-height: 15px; + -webkit-touch-callout: none; +} +.gform_wrapper .chosen-container .chosen-results li.active-result { + display: list-item; + cursor: pointer; +} +.gform_wrapper .chosen-container .chosen-results li.disabled-result { + display: list-item; + color: #ccc; + cursor: default; +} +.gform_wrapper .chosen-container .chosen-results li.highlighted { + background-color: #3875d7; + background-image: -webkit-gradient(linear, 50% 0, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); + background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: linear-gradient(#3875d7 20%, #2a62bc 90%); + color: #fff; +} +.gform_wrapper .chosen-container .chosen-results li.no-results { + display: list-item; + background: #f4f4f4; +} +.gform_wrapper .chosen-container .chosen-results li.group-result { + display: list-item; + font-weight: 700; + cursor: default; +} +.gform_wrapper .chosen-container .chosen-results li.group-option { + padding-left: 15px; +} +.gform_wrapper .chosen-container .chosen-results li em { + font-style: normal; + text-decoration: underline; +} +.gform_wrapper .chosen-container-multi .chosen-choices { + position: relative; + overflow: hidden; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + padding: 0; + width: 100%; + height: auto!important; + height: 1%; + border: 1px solid #aaa; + background-color: #fff; + background-image: -webkit-gradient(linear, 50% 0, 50% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); + background-image: -webkit-linear-gradient(#eee 1%, #fff 15%); + background-image: -moz-linear-gradient(#eee 1%, #fff 15%); + background-image: -o-linear-gradient(#eee 1%, #fff 15%); + background-image: linear-gradient(#eee 1%, #fff 15%); + cursor: text; +} +.gform_wrapper .chosen-container-multi .chosen-choices li { + float: left; + list-style: none; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-field { + margin: 0; + padding: 0; + white-space: nowrap; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-field input[type=text] { + margin: 1px 0; + padding: 5px; + height: 15px; + outline: 0; + border: 0!important; + background: transparent!important; + box-shadow: none; + color: #666; + font-size: 100%; + font-family: sans-serif; + line-height: normal; + border-radius: 0; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-field .default { + color: #999; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-choice { + position: relative; + margin: 3px 0 3px 5px !important; + padding: 3px 20px 3px 5px; + border: 1px solid #aaa; + border-radius: 3px; + background-color: #e4e4e4; + background-image: -webkit-gradient(linear, 50% 0, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); + background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-clip: padding-box; + box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, .05); + color: #333; + line-height: 13px; + cursor: default; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-choice .search-choice-close { + position: absolute; + top: 4px; + right: 3px; + display: block; + width: 12px; + height: 12px; + background: url(../images/chosen-sprite.png) -42px 1px no-repeat; + font-size: 1px; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover { + background-position: -42px -10px; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-choice-disabled { + padding-right: 5px; + border: 1px solid #ccc; + background-color: #e4e4e4; + background-image: -webkit-gradient(linear, 50% 0, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); + background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); + color: #666; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-choice-focus { + background: #d4d4d4; +} +.gform_wrapper .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close { + background-position: -42px -10px; +} +.gform_wrapper .chosen-container-multi .chosen-results { + margin: 0; + padding: 0; +} +.gform_wrapper .chosen-container-multi .chosen-drop .result-selected { + display: list-item; + color: #ccc; + cursor: default; +} +.gform_wrapper .chosen-container-active .chosen-single { + border: 1px solid #5897fb; + box-shadow: 0 0 5px rgba(0, 0, 0, .3); +} +.gform_wrapper .chosen-container-active.chosen-with-drop .chosen-single { + border: 1px solid #aaa; + -moz-border-radius-bottomright: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + border-bottom-left-radius: 0; + background-image: -webkit-gradient(linear, 50% 0, 50% 100%, color-stop(20%, #eee), color-stop(80%, #fff)); + background-image: -webkit-linear-gradient(#eee 20%, #fff 80%); + background-image: -moz-linear-gradient(#eee 20%, #fff 80%); + background-image: -o-linear-gradient(#eee 20%, #fff 80%); + background-image: linear-gradient(#eee 20%, #fff 80%); + box-shadow: 0 1px 0 #fff inset; +} +.gform_wrapper .chosen-container-active.chosen-with-drop .chosen-single div { + border-left: 0; + background: transparent; +} +.gform_wrapper .chosen-container-active.chosen-with-drop .chosen-single div b { + background-position: -18px 2px; +} +.gform_wrapper .chosen-container-active .chosen-choices { + border: 1px solid #5897fb; + box-shadow: 0 0 5px rgba(0, 0, 0, .3); +} +.gform_wrapper .chosen-container-active .chosen-choices li.search-field input[type=text] { + color: #111!important; +} +.gform_wrapper .chosen-disabled { + opacity: .5!important; + cursor: default; +} +.gform_wrapper .chosen-disabled .chosen-single { + cursor: default; +} +.gform_wrapper .chosen-disabled .chosen-choices .search-choice .search-choice-close { + cursor: default; +} +.gform_wrapper .chosen-rtl { + text-align: right; +} +.gform_wrapper .chosen-rtl .chosen-single { + overflow: visible; + padding: 0 8px 0 0; +} +.gform_wrapper .chosen-rtl .chosen-single span { + margin-right: 0; + margin-left: 26px; + direction: rtl; +} +.gform_wrapper .chosen-rtl .chosen-single-with-deselect span { + margin-left: 38px; +} +.gform_wrapper .chosen-rtl .chosen-single div { + right: auto; + left: 3px; +} +.gform_wrapper .chosen-rtl .chosen-single abbr { + right: auto; + left: 26px; +} +.gform_wrapper .chosen-rtl .chosen-choices li { + float: right; +} +.gform_wrapper .chosen-rtl .chosen-choices li.search-field input[type=text] { + direction: rtl; +} +.gform_wrapper .chosen-rtl .chosen-choices li.search-choice { + margin: 3px 5px 3px 0; + padding: 3px 5px 3px 19px; +} +.gform_wrapper .chosen-rtl .chosen-choices li.search-choice .search-choice-close { + right: auto; + left: 4px; +} +.gform_wrapper .chosen-rtl.chosen-container-single-nosearch .chosen-search.gform_wrapper .chosen-rtl .chosen-drop { + left: 9999px; } - -.gform_wrapper .chzn-container-single .chzn-single span { - margin-right: 26px; - display: block; - overflow: hidden; - white-space: nowrap; - -o-text-overflow: ellipsis; - -ms-text-overflow: ellipsis; - text-overflow: ellipsis; -} - -.gform_wrapper .chzn-container-single .chzn-single div { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - background-color: #CCC; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #CCC), color-stop(0.6, #EEE)); - background-image: -webkit-linear-gradient(center bottom, #CCC 0%, #EEE 60%); - background-image: -moz-linear-gradient(center bottom, #CCC 0%, #EEE 60%); - background-image: -o-linear-gradient(bottom, #CCC 0%, #EEE 60%); - background-image: -ms-linear-gradient(top, #CCC 0%,#EEE 60%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#CCC', endColorstr='#EEE',GradientType=0 ); - background-image: linear-gradient(top, #CCC 0%,#EEE 60%); - border-left: 1px solid #AAA; - position: absolute; - right: 0; - top: 0; - display: block; - height: 100%; - width: 18px; -} - -.gform_wrapper .chzn-container-single .chzn-single div b { - background-image: url(../images/chosen-sprite.png); - background-position: 0 1px; - background-repeat: no-repeat; - display: block; - width: 100%; - height: 100%; -} - -.gform_wrapper .chzn-container-single .chzn-search { - padding: 3px 4px; - margin: 0; - white-space: nowrap; -} - -.gform_wrapper .chzn-container-single .chzn-search input { - background: #FFF url(../images/chosen-sprite.png) 100% -20px no-repeat; - background: url(../images/chosen-sprite.png) 100% -20px no-repeat, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #EEE)); - background: url(../images/chosen-sprite.png) 100% -20px no-repeat, -webkit-linear-gradient(center bottom, white 85%, #EEE 99%); - background: url(../images/chosen-sprite.png) 100% -20px no-repeat, -moz-linear-gradient(center bottom, white 85%, #EEE 99%); - background: url(../images/chosen-sprite.png) 100% -20px no-repeat, -o-linear-gradient(bottom, white 85%, #EEE 99%); - background: url(../images/chosen-sprite.png) 100% -20px no-repeat, -ms-linear-gradient(top, #FFF 85%,#EEE 99%); - background: url(../images/chosen-sprite.png) 100% -20px no-repeat, -ms-linear-gradient(top, #FFF 85%,#EEE 99%); - background: url(../images/chosen-sprite.png) 100% -20px no-repeat, linear-gradient(top, #FFF 85%,#EEE 99%); - margin: 1px 0; - padding: 4px 20px 4px 5px; - outline: 0; - border: 1px solid #AAA; - font-family: sans-serif; - font-size: 1em; +.gform_wrapper .chosen-rtl.chosen-container-single .chosen-results { + margin: 0 0 4px 4px; + padding: 0 4px 0 0; } - -.gform_wrapper .chzn-container-single .chzn-drop { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; -} - -.gform_wrapper .chzn-container-multi .chzn-choices { - background-color: #FFF; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #EEE)); - background-image: -webkit-linear-gradient(center bottom, white 85%, #EEE 99%); - background-image: -moz-linear-gradient(center bottom, white 85%, #EEE 99%); - background-image: -o-linear-gradient(bottom, white 85%, #EEE 99%); - background-image: -ms-linear-gradient(top, #FFF 85%,#EEE 99%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFF', endColorstr='#EEE',GradientType=0 ); - background-image: linear-gradient(top, #FFF 85%,#EEE 99%); - border: 1px solid #AAA; - margin: 0; - padding: 0; - cursor: text; - overflow: hidden; - height: auto !important; - height: 1%; position: relative; -} - -.gform_wrapper .chzn-container-multi .chzn-choices li { - float: left; - list-style: none; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-field { - white-space: nowrap; - margin: 0; - padding: 0; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-field input { - color: #666; - background: transparent !important; - border: 0 !important; - padding: 5px; - margin: 1px 0; - outline: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - -o-box-shadow: none; - box-shadow: none; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-field .default { - color: #999; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-choice { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - background-color: #E4E4E4; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #E4E4E4), color-stop(0.7, #EEE)); - background-image: -webkit-linear-gradient(center bottom, #E4E4E4 0%, #EEE 70%); - background-image: -moz-linear-gradient(center bottom, #E4E4E4 0%, #EEE 70%); - background-image: -o-linear-gradient(bottom, #E4E4E4 0%, #EEE 70%); - background-image: -ms-linear-gradient(top, #E4E4E4 0%,#EEE 70%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#E4E4E4', endColorstr='#EEE',GradientType=0 ); - background-image: linear-gradient(top, #E4E4E4 0%,#EEE 70%); - color: #333; - border: 1px solid #B4B4B4; - line-height: 13px; - padding: 3px 19px 3px 6px; - margin: 3px 0 3px 5px; - position: relative; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-choice span { - cursor: default; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-choice-focus { - background-color: #D4D4D4; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-choice .search-choice-close { - display: block; - position: absolute; - right: 5px; - top: 6px; - width: 8px; - height: 9px; - font-size: 1px; - background-image: url(../images/chosen-sprite.png); - background-position: right top; - background-repeat: no-repeat; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-choice .search-choice-close:hover { - background-position: right -9px; -} - -.gform_wrapper .chzn-container-multi .chzn-choices .search-choice-focus .search-choice-close { - background-position: right -9px; -} - -.gform_wrapper .chzn-container .chzn-results { - margin: 0 4px 4px 0; - max-height: 190px; - padding: 0 0 0 4px; - position: relative; - overflow-x: hidden; - overflow-y: auto; -} - -.gform_wrapper .chzn-container-multi .chzn-results { - margin: -1px 0 0; - padding: 0; -} - -.gform_wrapper .chzn-container .chzn-results li { - display:none; - line-height: 80%; - padding: 7px 7px 8px; - margin: 0; - list-style: none; -} - -.gform_wrapper .chzn-container .chzn-results .active-result { - cursor: pointer; - display: list-item; -} - -.gform_wrapper .chzn-container .chzn-results .highlighted { - background-color: #F0F0F0; -} - -.gform_wrapper .chzn-container .chzn-results li em { - background-color: #FEFFDE; - font-style: normal; -} - -.gform_wrapper .chzn-container .chzn-results .highlighted em { - background: transparent; -} - -.gform_wrapper .chzn-container .chzn-results .no-results { - background-color: #F4F4F4; -} - -.gform_wrapper .chzn-container .chzn-results .group-result { - cursor: default; - color: #999; - font-weight: bold; -} - -.gform_wrapper .chzn-container .chzn-results .group-option { - padding-left: 20px; -} - -.gform_wrapper .chzn-container-multi .chzn-drop .result-selected { - display: none; -} - -.gform_wrapper .chzn-container-active .chzn-single { - -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); - -moz-box-shadow: 0 0 5px rgba(0,0,0,.3); - -o-box-shadow: 0 0 5px rgba(0,0,0,.3); - box-shadow: 0 0 5px rgba(0,0,0,.3); -} - -.gform_wrapper .chzn-container-active .chzn-single-with-drop { - border: 1px solid #AAA; - -webkit-box-shadow: 0 1px 0 #FFF inset; - -moz-box-shadow: 0 1px 0 #FFF inset; - -o-box-shadow: 0 1px 0 #FFF inset; - box-shadow: 0 1px 0 #FFF inset; - background-color: #EEE; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #EEE)); - background-image: -webkit-linear-gradient(center bottom, white 0%, #EEE 50%); - background-image: -moz-linear-gradient(center bottom, white 0%, #EEE 50%); - background-image: -o-linear-gradient(bottom, white 0%, #EEE 50%); - background-image: -ms-linear-gradient(top, #FFF 0%,#EEE 50%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFF', endColorstr='#EEE',GradientType=0 ); - background-image: linear-gradient(top, #FFF 0%,#EEE 50%); - -webkit-border-bottom-left-radius : 0; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomleft : 0; - -moz-border-radius-bottomright: 0; - border-bottom-left-radius : 0; - border-bottom-right-radius: 0; -} - -.gform_wrapper .chzn-container-active .chzn-single-with-drop div { - background: transparent; - border-left: none; -} - -.gform_wrapper .chzn-container-active .chzn-single-with-drop div b { - background-position: -18px 1px; -} - -.gform_wrapper .chzn-container-active .chzn-choices { - -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); - -moz-box-shadow: 0 0 5px rgba(0,0,0,.3); - -o-box-shadow: 0 0 5px rgba(0,0,0,.3); - box-shadow: 0 0 5px rgba(0,0,0,.3); -} - -.gform_wrapper .chzn-container-active .chzn-choices .search-field input { - color: #111 !important; -} - -.gform_wrapper .chzn-rtl { - direction: rtl; - text-align: right; -} - -.gform_wrapper .chzn-rtl .chzn-single { - padding-left: 0; - padding-right: 8px; -} - -.gform_wrapper .chzn-rtl .chzn-single span { - margin-left: 26px; - margin-right: 0; -} - -.gform_wrapper .chzn-rtl .chzn-single div { - left: 0; - right: auto; - border-left: none; - border-right: 1px solid #AAA; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; +.gform_wrapper .chosen-rtl .chosen-results li.group-option { + padding-right: 15px; + padding-left: 0; } - -.gform_wrapper .chzn-rtl .chzn-choices li { - float: right; +.gform_wrapper .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div { + border-right: 0; } - -.gform_wrapper .chzn-rtl .chzn-choices .search-choice { - padding: 3px 6px 3px 19px; - margin: 3px 5px 3px 0; +.gform_wrapper .chosen-rtl .chosen-search input[type=text] { + padding: 4px 5px 4px 20px; + background: #fff url(../images/chosen-sprite.png) no-repeat -30px -20px; + background: url(../images/chosen-sprite.png) no-repeat -30px -20px; + direction: rtl; } - -.gform_wrapper .chzn-rtl .chzn-choices .search-choice .search-choice-close { - left: 5px; - right: auto; - background-position: right top; +.gform_wrapper .chosen-rtl.chosen-container-single .chosen-single div b { + background-position: 6px 2px; } - -.gform_wrapper .chzn-rtl.chzn-container-single .chzn-results { - margin-left: 4px; - margin-right: 0; - padding-left: 0; - padding-right: 4px; -} - -.gform_wrapper .chzn-rtl .chzn-results .group-option { - padding-left: 0; - padding-right: 20px; +.gform_wrapper .chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b { + background-position: -12px 2px; } - -.gform_wrapper .chzn-rtl.chzn-container-active .chzn-single-with-drop div { - border-right: none; -} - -.gform_wrapper .chzn-rtl .chzn-search input { - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, #FFF; - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #EEE)); - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, -webkit-linear-gradient(center bottom, white 85%, #EEE 99%); - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, -moz-linear-gradient(center bottom, white 85%, #EEE 99%); - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, -o-linear-gradient(bottom, white 85%, #EEE 99%); - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, -ms-linear-gradient(top, #FFF 85%,#EEE 99%); - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, -ms-linear-gradient(top, #FFF 85%,#EEE 99%); - background: url(../images/chosen-sprite.png) -38px -20px no-repeat, linear-gradient(top, #FFF 85%,#EEE 99%); - padding: 4px 5px 4px 20px; +@media only screen and (-webkit-min-device-pixel-ratio:2), only screen and (min-resolution:144dpi) { + .gform_wrapper .chosen-rtl .chosen-search input[type=text].gform_wrapper .chosen-container-single .chosen-single abbr.gform_wrapper .chosen-container-single .chosen-single div b.gform_wrapper .chosen-container-single .chosen-search input[type=text].gform_wrapper .chosen-container-multi .chosen-choices .search-choice .search-choice-close.gform_wrapper .chosen-container .chosen-results-scroll-down span.gform_wrapper .chosen-container .chosen-results-scroll-up span { + background-image: url(../images/chosen-sprite@2x.png)!important; + background-size: 52px 37px!important; + background-repeat: no-repeat!important; + } } /* credit card icons ------------------------------------------------------*/ diff --git a/entry_detail.php b/entry_detail.php index 47927d5..bffa0b3 100644 --- a/entry_detail.php +++ b/entry_detail.php @@ -1,1005 +1,1018 @@ - "is_starred", "value" => (bool) $star); - if(!is_null($read)) - $search_criteria["field_filters"][] = array("key" => "is_read", "value" => (bool) $read); - - $search_field_id = rgget("field_id"); - - if(isset($_GET["field_id"]) && $_GET["field_id"] !== ''){ - $key = $search_field_id; - $val = rgget("s"); - $strpos_row_key = strpos($search_field_id, "|"); - if ($strpos_row_key !== false) { //multi-row likert - $key_array = explode("|", $search_field_id); - $key = $key_array[0]; - $val = $key_array[1] . ":" . $val; - } - $type = rgget("type"); - if(empty($type)){ - $type = rgget("field_id") == "0" ? "global" : "field"; - } - - $search_criteria["field_filters"][] = array( - "key" => $key, - "type" => $type, - "operator" => rgempty("operator", $_GET) ? "is" : rgget("operator"), - "value" => $val - ); - } - - $paging = array('offset' => $position, 'page_size' => 1); - - if(!empty($sort_field)) - $sorting = array('key' => $_GET["sort"], 'direction' => $sort_direction, 'is_numeric' => $is_numeric); - else - $sorting = array(); - $total_count = 0; - $leads = GFAPI::get_entries($form['id'], $search_criteria, $sorting, $paging, $total_count); - - $prev_pos = !rgblank($position) && $position > 0 ? $position - 1 : false; - $next_pos = !rgblank($position) && $position < $total_count - 1 ? $position + 1 : false; - - // unread filter requires special handling for pagination since entries are filter out of the query as they are read - if($filter == 'unread') { - $next_pos = $position; - - if($next_pos + 1 == $total_count) - $next_pos = false; - - } - - if(!$lead_id){ - $lead = !empty($leads) ? $leads[0] : false; - } else { - $lead = GFAPI::get_entry($lead_id); - } - - - if(!$lead) { - _e("Oops! We couldn't find your entry. Please try again", "gravityforms"); - return; - } - - RGFormsModel::update_lead_property($lead["id"], "is_read", 1); - - switch(RGForms::post("action")){ - case "update" : - check_admin_referer('gforms_save_entry', 'gforms_save_entry'); - //Loading files that have been uploaded to temp folder - $files = GFCommon::json_decode(stripslashes(RGForms::post("gform_uploaded_files"))); - if(!is_array($files)) - $files = array(); - - GFFormsModel::$uploaded_files[$form_id] = $files; - GFFormsModel::save_lead($form, $lead); - - do_action("gform_after_update_entry", $form, $lead["id"]); - do_action("gform_after_update_entry_{$form["id"]}", $form, $lead["id"]); - - $lead = RGFormsModel::get_lead($lead["id"]); - $lead = GFFormsModel::set_entry_meta($lead, $form); - break; - - case "add_note" : - check_admin_referer('gforms_update_note', 'gforms_update_note'); - $user_data = get_userdata($current_user->ID); - RGFormsModel::add_note($lead["id"], $current_user->ID, $user_data->display_name, stripslashes($_POST["new_note"])); - - //emailing notes if configured - if(rgpost("gentry_email_notes_to")) - { - $email_to = $_POST["gentry_email_notes_to"]; - $email_from = $current_user->user_email; - $email_subject = stripslashes($_POST["gentry_email_subject"]); - - $headers = "From: \"$email_from\" <$email_from> \r\n"; - $result = wp_mail($email_to, $email_subject, stripslashes($_POST["new_note"]), $headers); - } - break; - - case "add_quick_note" : - check_admin_referer('gforms_save_entry', 'gforms_save_entry'); - $user_data = get_userdata($current_user->ID); - RGFormsModel::add_note($lead["id"], $current_user->ID, $user_data->display_name, stripslashes($_POST["quick_note"])); - break; - - case "bulk" : - check_admin_referer('gforms_update_note', 'gforms_update_note'); - if($_POST["bulk_action"] == "delete") - RGFormsModel::delete_notes($_POST["note"]); - break; - - case "trash" : - check_admin_referer('gforms_save_entry', 'gforms_save_entry'); - RGFormsModel::update_lead_property($lead["id"], "status", "trash"); - $lead = RGFormsModel::get_lead($lead["id"]); - break; - - case "restore" : - case "unspam" : - check_admin_referer('gforms_save_entry', 'gforms_save_entry'); - RGFormsModel::update_lead_property($lead["id"], "status", "active"); - $lead = RGFormsModel::get_lead($lead["id"]); - break; - - case "spam" : - check_admin_referer('gforms_save_entry', 'gforms_save_entry'); - RGFormsModel::update_lead_property($lead["id"], "status", "spam"); - $lead = RGFormsModel::get_lead($lead["id"]); - break; - - case "delete" : - check_admin_referer('gforms_save_entry', 'gforms_save_entry'); - if(!GFCommon::current_user_can_any("gravityforms_delete_entries")) - die(__("You don't have adequate permissions to delete entries.", "gravityforms")); - RGFormsModel::delete_lead($lead["id"]); - ?> - - - - - - - - - " /> - -
-

ID: lock_info($lead_id);?>

- - -
-
    -
  • entry of
  • -
  • -
  • -
-
- - - - -
-
- - - -
-

- -

-
-
-
-
- :

- : -

- : -

- - : " alt="" title="">user_login) ?> -

- - - : " target="_blank" alt="" title="">.../ -

- - : " title="">post_title) ?> -

- : -

- : -

- : -

- : -

- -
-
- -
- '; - echo apply_filters("gform_entrydetail_update_button", $update_button); - if($mode == "edit") - echo '  '; - } - ?> -
-
-
-
-
-
- - - - - - - -
-

-
- -
- -

- - " class="button"> - - " id="notification_" onclick="toggleNotificationOverride();" /> -

- - - - - " class="button" style="" onclick="ResendNotifications();"/> - - - -
-
-
- - - - -
- - - - - -
- - -
- -
-
- -
-

- -

- - - -
- -
- -
- -
-
-
-
- - -
- -
- -
-

- -

-
-
 
- - - - - - "; - - $content = apply_filters("gform_field_content", $content, $field, $value, $lead["id"], $form["id"]); - - echo $content; - break; - } - } - ?> - -
-

-
" . - GFCommon::get_field_input($field, $value, $lead["id"]) . "
-
- -
- - 0 && $is_editable && GFCommon::current_user_can_any("gravityforms_edit_entry_notes")){ - ?> -
- - - '; - echo apply_filters("gform_notes_apply_button", $apply_button); - ?> -
- - - - - - - - - - - = $notes_count ? true : false; - ?> - - - - - - - - - - - - -
Notes
- - - - "> - note_type ? " gforms_note_{$note->note_type}" : ""; - ?> -
-
user_id, 48), $note);?>
-
user_name)?>
-

user_email) ?>
- date_created, false)) ?>

-
-
value) ?>
-
- - '; - echo apply_filters("gform_addnote_button", $note_button); - - if(!empty($emails)){ ?> -    - - -    - - - - -
- - - - - - - - - - = $field_count ? true : false; - ?> - - - - = $field_count && !$has_product_fields ? true : false; - $last_row = $is_last ? " lastrow" : ""; - - $display_value = empty($display_value) && $display_value !== "0" ? " " : $display_value; - - $content = ' - - - - - - '; - - $content = apply_filters("gform_field_content", $content, $field, $value, $lead["id"], $form["id"]); - - echo $content; - - } - break; - } - } - - $products = array(); - if($has_product_fields){ - $products = GFCommon::get_product_fields($form, $lead); - if(!empty($products["products"])){ - ?> - - - - - - - - - -
- : - - - onclick="ToggleShowEmptyFields();"/>   - -
">
' . esc_html(GFCommon::get_label($field)) . '
' . $display_value . '
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
    - - > - -
-
  
 
-
- $pos), remove_query_arg(array('pos', 'lid'))) . '"': ''; - $class .= ' gf_entry_pagination_link'; - $class .= $pos !== false ? ' gf_entry_pagination_link_active' : ' gf_entry_pagination_link_inactive'; - - return ''; - } - - /** - * @param $lead - * @param $form - * @return mixed - */ - public static function payment_details_box($lead, $form) - { - ?> - -
-

- -

- -
-
-
-
- : -

- : -

- : -

- : -

- -
-
-
-
- "is_starred", "value" => (bool) $star); + if(!is_null($read)) + $search_criteria["field_filters"][] = array("key" => "is_read", "value" => (bool) $read); + + $search_field_id = rgget("field_id"); + + if(isset($_GET["field_id"]) && $_GET["field_id"] !== ''){ + $key = $search_field_id; + $val = rgget("s"); + $strpos_row_key = strpos($search_field_id, "|"); + if ($strpos_row_key !== false) { //multi-row likert + $key_array = explode("|", $search_field_id); + $key = $key_array[0]; + $val = $key_array[1] . ":" . $val; + } + $type = rgget("type"); + if(empty($type)){ + $type = rgget("field_id") == "0" ? "global" : "field"; + } + + $search_criteria["field_filters"][] = array( + "key" => $key, + "type" => $type, + "operator" => rgempty("operator", $_GET) ? "is" : rgget("operator"), + "value" => $val + ); + } + + $paging = array('offset' => $position, 'page_size' => 1); + + if(!empty($sort_field)) + $sorting = array('key' => $_GET["sort"], 'direction' => $sort_direction, 'is_numeric' => $is_numeric); + else + $sorting = array(); + $total_count = 0; + $leads = GFAPI::get_entries($form['id'], $search_criteria, $sorting, $paging, $total_count); + + $prev_pos = !rgblank($position) && $position > 0 ? $position - 1 : false; + $next_pos = !rgblank($position) && $position < $total_count - 1 ? $position + 1 : false; + + // unread filter requires special handling for pagination since entries are filter out of the query as they are read + if($filter == 'unread') { + $next_pos = $position; + + if($next_pos + 1 == $total_count) + $next_pos = false; + + } + + if(!$lead_id){ + $lead = !empty($leads) ? $leads[0] : false; + } else { + $lead = GFAPI::get_entry($lead_id); + } + + + if(!$lead) { + _e("Oops! We couldn't find your entry. Please try again", "gravityforms"); + return; + } + + RGFormsModel::update_lead_property($lead["id"], "is_read", 1); + + switch(RGForms::post("action")){ + case "update" : + check_admin_referer('gforms_save_entry', 'gforms_save_entry'); + //Loading files that have been uploaded to temp folder + $files = GFCommon::json_decode(stripslashes(RGForms::post("gform_uploaded_files"))); + if(!is_array($files)) + $files = array(); + + GFFormsModel::$uploaded_files[$form_id] = $files; + GFFormsModel::save_lead($form, $lead); + + do_action("gform_after_update_entry", $form, $lead["id"]); + do_action("gform_after_update_entry_{$form["id"]}", $form, $lead["id"]); + + $lead = RGFormsModel::get_lead($lead["id"]); + $lead = GFFormsModel::set_entry_meta($lead, $form); + break; + + case "add_note" : + check_admin_referer('gforms_update_note', 'gforms_update_note'); + $user_data = get_userdata($current_user->ID); + RGFormsModel::add_note($lead["id"], $current_user->ID, $user_data->display_name, stripslashes($_POST["new_note"])); + + //emailing notes if configured + if(rgpost("gentry_email_notes_to")){ + GFCommon::log_debug( 'Preparing to email entry notes.' ); + $email_to = $_POST["gentry_email_notes_to"]; + $email_from = $current_user->user_email; + $email_subject = stripslashes($_POST["gentry_email_subject"]); + $headers = "From: \"$email_from\" <$email_from> \r\n"; + $body = stripslashes( $_POST["new_note"] ); + GFCommon::log_debug( "Emailing notes - TO: $email_to SUBJECT: $email_subject BODY: $body HEADERS: $headers" ); + $result = wp_mail( $email_to, $email_subject, $body, $headers ); + } + break; + + case "add_quick_note" : + check_admin_referer('gforms_save_entry', 'gforms_save_entry'); + $user_data = get_userdata($current_user->ID); + RGFormsModel::add_note($lead["id"], $current_user->ID, $user_data->display_name, stripslashes($_POST["quick_note"])); + break; + + case "bulk" : + check_admin_referer('gforms_update_note', 'gforms_update_note'); + if($_POST["bulk_action"] == "delete") + RGFormsModel::delete_notes($_POST["note"]); + break; + + case "trash" : + check_admin_referer('gforms_save_entry', 'gforms_save_entry'); + RGFormsModel::update_lead_property($lead["id"], "status", "trash"); + $lead = RGFormsModel::get_lead($lead["id"]); + break; + + case "restore" : + case "unspam" : + check_admin_referer('gforms_save_entry', 'gforms_save_entry'); + RGFormsModel::update_lead_property($lead["id"], "status", "active"); + $lead = RGFormsModel::get_lead($lead["id"]); + break; + + case "spam" : + check_admin_referer('gforms_save_entry', 'gforms_save_entry'); + RGFormsModel::update_lead_property($lead["id"], "status", "spam"); + $lead = RGFormsModel::get_lead($lead["id"]); + break; + + case "delete" : + check_admin_referer('gforms_save_entry', 'gforms_save_entry'); + if(!GFCommon::current_user_can_any("gravityforms_delete_entries")) + die(__("You don't have adequate permissions to delete entries.", "gravityforms")); + RGFormsModel::delete_lead($lead["id"]); + ?> + + + + + +
+ + + " /> + +
+

ID: lock_info($lead_id);?>

+ + +
+
    +
  • entry of
  • +
  • +
  • +
+
+ + + + +
+
+ + + +
+

+ +

+
+
+
+ :

+ : +

+ : +

+ + : " alt="" title="">user_login) ?> +

+ + + : " target="_blank" alt="" title="">.../ +

+ + : " title="">post_title) ?> +

+ : +

+ : +

+ : +

+ : +

+ +
+
+ +
+ '; + echo apply_filters("gform_entrydetail_update_button", $update_button); + if($mode == "edit") + echo '  '; + } + ?> +
+
+
+
+
+
+ + + + + + + +
+

+
+ +
+ +

+ + " class="button"> + + " id="notification_" onclick="toggleNotificationOverride();" /> +

+ + + + + " class="button" style="" onclick="ResendNotifications();"/> + + + +
+
+
+ + + + +
+ + + + + +
+ + +
+ +
+
+ +
+

+ +

+ + + +
+ +
+ +
+ +
+
+
+
+ + +
+ +
+ +
+

+ +

+
+ + + + + + + "; + + $content = apply_filters("gform_field_content", $content, $field, $value, $lead["id"], $form["id"]); + + echo $content; + break; + } + } + ?> + +
+

+
" . + GFCommon::get_field_input($field, $value, $lead["id"]) . "
+
+ +
+
+ 0 && $is_editable && GFCommon::current_user_can_any("gravityforms_edit_entry_notes")){ + ?> +
+ + + '; + echo apply_filters("gform_notes_apply_button", $apply_button); + ?> +
+ + + + + + + + + + + = $notes_count ? true : false; + ?> + + + + + + + + + + + + +
Notes
+ + + + "> + note_type ? " gforms_note_{$note->note_type}" : ""; + ?> +
+
user_id, 48), $note);?>
+
user_name)?>
+

user_email) ?>
+ date_created, false)) ?>

+
+
value) ?>
+
+ + '; + echo apply_filters("gform_addnote_button", $note_button); + + if(!empty($emails)){ ?> +    + + +    + + + + +
+ + + + + + + + + + = $field_count ? true : false; + ?> + + + + = $field_count && !$has_product_fields ? true : false; + $last_row = $is_last ? " lastrow" : ""; + + $display_value = empty($display_value) && $display_value !== "0" ? " " : $display_value; + + $content = ' + + + + + + '; + + $content = apply_filters("gform_field_content", $content, $field, $value, $lead["id"], $form["id"]); + + echo $content; + + } + break; + } + } + + $products = array(); + if($has_product_fields){ + $products = GFCommon::get_product_fields($form, $lead); + if(!empty($products["products"])){ + ?> + + + + + + + + + +
+ : + + + onclick="ToggleShowEmptyFields();"/>   + +
">
' . esc_html(GFCommon::get_label($field)) . '
' . $display_value . '
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
    + + > + +
+
  
 
+
+ $pos), remove_query_arg(array('pos', 'lid'))) . '"': ''; + $class .= ' gf_entry_pagination_link'; + $class .= $pos !== false ? ' gf_entry_pagination_link_active' : ' gf_entry_pagination_link_inactive'; + + return ''; + } + + /** + * @param $lead + * @param $form + * @return mixed + */ + public static function payment_details_box($lead, $form) + { + ?> + +
+

+ +

+ +
+
+
+ +
+ : +
+ + +
+ : +
+ +
+ : +
+ +
+ : +
+ +
+
+
+
+ \ No newline at end of file diff --git a/export.php b/export.php index dba5857..6a5e287 100644 --- a/export.php +++ b/export.php @@ -72,15 +72,19 @@ public static function maybe_export(){ foreach($field["choices"] as &$choice) unset($choice["value"]); } + } - // convert associative array to indexed - if(isset($form['confirmations'])) - $form['confirmations'] = array_values($form['confirmations']); + // convert associative array to indexed + if(isset($form['confirmations'])) + $form['confirmations'] = array_values($form['confirmations']); - if(isset($form['notifications'])) - $form['notifications'] = array_values($form['notifications']); + if(isset($form['notifications'])){ + $form['notifications'] = array_values($form['notifications']); - } + foreach( $form["notifications"] as &$notification ){ + $notification["isActive"] = rgar( $notification, "isActive" ) ? "1" : "0"; + } + } $form = apply_filters( 'gform_export_form', $form ); $form = apply_filters( "gform_export_form_{$form['id']}", $form ); diff --git a/form_display.php b/form_display.php index 8931d8a..3083802 100644 --- a/form_display.php +++ b/form_display.php @@ -164,6 +164,7 @@ private static function upload_files($form, $files){ GFCommon::log_debug("upload_files() - temp file info: " . print_r($file_info, true)); if($file_info && move_uploaded_file($_FILES[$input_name]['tmp_name'], $target_path . $file_info["temp_filename"])){ + GFFormsModel::set_permissions( $target_path . $file_info['temp_filename'] ); $files[$input_name] = $file_info["uploaded_filename"]; GFCommon::log_debug("upload_files() - file uploaded successfully: {$file_info["uploaded_filename"]}"); } @@ -437,7 +438,7 @@ public static function get_form($form_id, $display_title=true, $display_descript $form["fields"][] = self::get_honeypot_field($form); //Fired right before the form rendering process. Allow users to manipulate the form object before it gets displayed in the front end - $form = apply_filters("gform_pre_render_$form_id", apply_filters("gform_pre_render", $form, $ajax), $ajax); + $form = apply_filters( "gform_pre_render_{$form_id}", apply_filters( 'gform_pre_render', $form, $ajax, $field_values ), $ajax, $field_values ); if($form == null) return "

" . __("Oops! We could not locate your form.", "gravityforms") . "

"; @@ -594,7 +595,7 @@ public static function get_form($form_id, $display_title=true, $display_descript "; if($has_pages){ - $previous_button = self::get_form_button($form["id"], "gform_previous_button_{$form["id"]}", $form["lastPageButton"], __("Previous", "gravityforms"), "button gform_previous_button", __("Previous Page", "gravityforms"), self::get_current_page($form_id) -1); + $previous_button = self::get_form_button($form["id"], "gform_previous_button_{$form["id"]}", $form["lastPageButton"], __("Previous", "gravityforms"), "gform_previous_button", __("Previous Page", "gravityforms"), self::get_current_page($form_id) -1); $previous_button = apply_filters("gform_previous_button", $previous_button, $form); $previous_button = apply_filters("gform_previous_button_{$form["id"]}", $previous_button, $form); $form_string .= "" . self::gform_footer($form, "gform_page_footer " . $form['labelPlacement'], $ajax, $field_values, $previous_button, $display_title, $display_description, $is_postback) . " @@ -774,12 +775,14 @@ private static function get_form_button($form_id, $button_input_id, $button, $de } if($button["type"] == "text" || empty($button["imageUrl"])){ + $class .= ' button'; $button_text = !empty($button["text"]) ? $button["text"] : $default_text; $button_input = ""; } else{ $imageUrl = $button["imageUrl"]; - $button_input= ""; + $class .= ' gform_image_button'; + $button_input= ""; } return $button_input; } @@ -788,7 +791,7 @@ private static function gform_footer($form, $class, $ajax, $field_values, $previ $form_id = $form["id"]; $footer = "
"; - $button_input = self::get_form_button($form["id"], "gform_submit_button_{$form["id"]}", $form["button"], __("Submit", "gravityforms"), "button gform_button", __("Submit", "gravityforms"), 0); + $button_input = self::get_form_button($form["id"], "gform_submit_button_{$form["id"]}", $form["button"], __("Submit", "gravityforms"), "gform_button", __("Submit", "gravityforms"), 0); $button_input = apply_filters("gform_submit_button", $button_input, $form); $button_input = apply_filters("gform_submit_button_{$form_id}", $button_input, $form); $footer .= $previous_button . " " . $button_input; @@ -1031,40 +1034,40 @@ public static function handle_confirmation($form, $lead, $ajax=false){ $confirmation = empty($form["confirmation"]["message"]) ? "{$anchor} " : "{$anchor}
" . GFCommon::replace_variables($form["confirmation"]["message"], $form, $lead, false, true, $nl2br) . "
"; } else{ - if(!empty($form["confirmation"]["pageId"])){ - $url = get_permalink($form["confirmation"]["pageId"]); - $dynamic_query = GFCommon::replace_variables(trim($form["confirmation"]["queryString"]), $form, $lead, true); - if(!empty($dynamic_query)) - $url .= "?" . $dynamic_query; - } - else{ - $url = GFCommon::replace_variables(trim($form["confirmation"]["url"]), $form, $lead, false, true); - $url_info = parse_url($url); - $query_string = rgar($url_info, "query"); - $dynamic_query = GFCommon::replace_variables(trim($form["confirmation"]["queryString"]), $form, $lead, true); - $query_string .= rgempty("query", $url_info) || empty($dynamic_query) ? $dynamic_query : "&" . $dynamic_query; - - if(!empty($url_info["fragment"])) - $query_string .= "#" . rgar($url_info,"fragment"); - - $url = $url_info["scheme"] . "://" . rgar($url_info,"host"); - if(!empty($url_info["port"])) - $url .= ":" . rgar($url_info,"port"); - - $url .= rgar($url_info,"path"); - if(!empty($query_string)){ - $url .= "?{$query_string}"; - } + if ( ! empty( $form['confirmation']['pageId'] ) ) { + $url = get_permalink( $form['confirmation']['pageId'] ); - } + } else { + $url = GFCommon::replace_variables( trim( $form['confirmation']['url'] ), $form, $lead, false, true, true, 'text' ); + } - if(headers_sent() || $ajax){ - //Perform client side redirect for AJAX forms, of if headers have already been sent - $confirmation = self::get_js_redirect_confirmation($url, $ajax); - } - else{ - $confirmation = array("redirect" => $url); - } + $url_info = parse_url( $url ); + $query_string = rgar( $url_info, 'query' ); + $dynamic_query = GFCommon::replace_variables( trim( $form['confirmation']['queryString'] ), $form, $lead, true, false, false, 'text' ); + $query_string .= rgempty( 'query', $url_info ) || empty( $dynamic_query ) ? $dynamic_query : '&' . $dynamic_query; + + + if ( ! empty( $url_info['fragment'] ) ) { + $query_string .= '#' . rgar( $url_info, 'fragment' ); + } + + $url = $url_info['scheme'] . '://' . rgar( $url_info, 'host' ); + if ( ! empty( $url_info['port'] ) ) { + $url .= ':' . rgar( $url_info, 'port' ); + } + + $url .= rgar( $url_info, 'path' ); + if ( ! empty( $query_string ) ) { + $url .= "?{$query_string}"; + } + + + if ( headers_sent() || $ajax ) { + //Perform client side redirect for AJAX forms, of if headers have already been sent + $confirmation = self::get_js_redirect_confirmation( $url, $ajax ); + } else { + $confirmation = array( 'redirect' => $url ); + } } $confirmation = apply_filters("gform_confirmation_{$form["id"]}", apply_filters("gform_confirmation", $confirmation, $form, $lead, $ajax), $form, $lead, $ajax); @@ -1703,7 +1706,11 @@ public static function enqueue_form_scripts( $form, $ajax = false ){ } if( self::has_enhanced_dropdown( $form ) ) { - wp_enqueue_script( 'gform_chosen' ); + if( wp_script_is( 'chosen', 'registered' ) ) { + wp_enqueue_script( 'chosen' ); + } else { + wp_enqueue_script( 'gform_chosen' ); + } } do_action( 'gform_enqueue_scripts', $form, $ajax ); @@ -1773,8 +1780,12 @@ public static function print_form_scripts( $form, $ajax ) { $scripts[] = 'gform_masked_input'; } - if( self::has_enhanced_dropdown( $form ) && ! wp_script_is( 'gform_chosen' ) ) { - $scripts[] = 'gform_chosen'; + if( self::has_enhanced_dropdown( $form ) && ! wp_script_is( 'gform_chosen' ) && ! wp_script_is( 'chosen' ) ) { + if( wp_script_is( 'chosen', 'registered' ) ) { + $scripts[] = 'chosen'; + } else { + $scripts[] = 'gform_chosen'; + } } if( ! wp_script_is( 'jquery' ) ) { @@ -1890,11 +1901,16 @@ private static function get_conditional_logic($form, $field_values = array()){ //radio buttons start at 0 and checkboxes start at 1 $choice_index = $input_type == "radio" ? 0 : 1; + $is_pricing_field = GFCommon::is_pricing_field( $field['type'] ); foreach($field["choices"] as $choice){ + if( $input_type == "checkbox" && ($choice_index % 10) == 0){ + $choice_index++; + } + if(rgar($choice,"isSelected") && $input_type == "select"){ - $val = isset($choice["price"]) ? $choice["value"] . "|" . GFCommon::to_number($choice["price"]) : $choice["value"]; + $val = $is_pricing_field ? $choice["value"] . "|" . GFCommon::to_number($choice["price"]) : $choice["value"]; $default_values[$field["id"]] = $val; } else if(rgar($choice,"isSelected")){ @@ -2397,10 +2413,10 @@ public static function get_field($field, $value="", $force_frontend_label = fals return; //ignore page breaks in the entry detail page } else if(!IS_ADMIN){ - $next_button = self::get_form_button($form["id"], "gform_next_button_{$form["id"]}_{$field["id"]}", $field["nextButton"], __("Next", "gravityforms"), "button gform_next_button", __("Next Page", "gravityforms"), $field["pageNumber"]); + $next_button = self::get_form_button($form["id"], "gform_next_button_{$form["id"]}_{$field["id"]}", $field["nextButton"], __("Next", "gravityforms"), "gform_next_button", __("Next Page", "gravityforms"), $field["pageNumber"]); $next_button = apply_filters("gform_next_button", $next_button, $form); $next_button = apply_filters("gform_next_button_{$form["id"]}", $next_button, $form); - $previous_button = $field["pageNumber"] == 2 ? "" : self::get_form_button($form["id"], "gform_previous_button_{$form["id"]}_{$field["id"]}", $field["previousButton"], __("Previous", "gravityforms"), "button gform_previous_button", __("Previous Page", "gravityforms"), $field["pageNumber"]-2); + $previous_button = $field["pageNumber"] == 2 ? "" : self::get_form_button($form["id"], "gform_previous_button_{$form["id"]}_{$field["id"]}", $field["previousButton"], __("Previous", "gravityforms"), "gform_previous_button", __("Previous Page", "gravityforms"), $field["pageNumber"]-2); if(!empty($previous_button)){ $previous_button = apply_filters("gform_previous_button", $previous_button, $form); $previous_button = apply_filters("gform_previous_button_{$form["id"]}", $previous_button, $form); @@ -2512,8 +2528,9 @@ public static function get_field_content($field, $value="", $force_frontend_labe $admin_buttons = IS_ADMIN ? "
{$field_type_title} : " . __("Field ID", "gravityforms") . " {$field["id"]}
" . $delete_field_link . $duplicate_field_link . "
" : ""; $field_label = $force_frontend_label ? $field["label"] : GFCommon::get_label($field); - if(rgar($field, "inputType") == "singleproduct" && !rgempty($field["id"] . ".1", $value)) + if( (rgar($field, "inputType") == "singleproduct" || rgar($field, "inputType") == "calculation" ) && !rgempty($field["id"] . ".1", $value)){ $field_label = rgar($value, $field["id"] . ".1"); + } $field_id = IS_ADMIN || $form_id == 0 ? "input_$id" : "input_" . $form_id . "_$id"; @@ -2564,9 +2581,14 @@ public static function get_field_content($field, $value="", $force_frontend_labe $target_input_id = $field_id . "_3"; } - case "address" : - if(empty($target_input_id)) + case "address" : + if(empty($target_input_id)){ $target_input_id = $field_id . "_1"; + } + + case 'list': + if(empty($target_input_id)) + $target_input_id = sprintf( 'input_%s_%s_shim', $form_id, $field['id'] ); default : if(empty($target_input_id)) @@ -2734,8 +2756,9 @@ public static function update_confirmation($form, $lead=null) { foreach($form['confirmations'] as $confirmation) { - if($confirmation['isDefault']) + if( rgar($confirmation, 'isDefault') ){ continue; + } if(isset($confirmation['isActive']) && ! $confirmation['isActive']) continue; diff --git a/form_settings.php b/form_settings.php index 31a3fc2..68669d6 100644 --- a/form_settings.php +++ b/form_settings.php @@ -1431,7 +1431,10 @@ function prepare_items() { } function display() { - extract( $this->_args ); + //extract( $this->_args ); + + $singular = $this->_args['singular']; + ?> diff --git a/forms_model.php b/forms_model.php index 8f560f2..636f8c7 100644 --- a/forms_model.php +++ b/forms_model.php @@ -657,6 +657,7 @@ public static function delete_leads_by_form($form_id, $status=""){ $lead_notes_table = self::get_lead_notes_table_name(); $lead_detail_table = self::get_lead_details_table_name(); $lead_detail_long_table = self::get_lead_details_long_table_name(); + $lead_meta_table = self::get_lead_meta_table_name(); do_action("gform_delete_entries", $form_id, $status); @@ -688,6 +689,13 @@ public static function delete_leads_by_form($form_id, $status=""){ )", $form_id); $wpdb->query($sql); + //Delete from lead meta + $sql = $wpdb->prepare(" DELETE FROM $lead_meta_table + WHERE lead_id IN ( + SELECT id FROM $lead_table WHERE form_id=%d {$status_filter} + )", $form_id); + $wpdb->query($sql); + //Delete from lead $sql = $wpdb->prepare("DELETE FROM $lead_table WHERE form_id=%d {$status_filter}", $form_id); $wpdb->query($sql); @@ -1472,7 +1480,7 @@ public static function get_section($form, $field_id){ return null; } - public static function is_value_match( $field_value, $target_value, $operation="is", $source_field = null, $rule = null ){ + public static function is_value_match( $field_value, $target_value, $operation="is", $source_field = null, $rule = null, $form = null ) { $is_match = false; @@ -1500,7 +1508,7 @@ public static function is_value_match( $field_value, $target_value, $operation=" $is_match = true; } - return apply_filters( 'gform_is_value_match', $is_match, $field_value, $target_value, $operation, $source_field, $rule ); + return apply_filters( 'gform_is_value_match', $is_match, $field_value, $target_value, $operation, $source_field, $rule, $form ); } private static function try_convert_float($text){ @@ -1582,7 +1590,7 @@ private static function get_field_display($form, $field, $field_values, $lead=nu $source_field = RGFormsModel::get_field($form, $rule["fieldId"]); $field_value = empty($lead) ? self::get_field_value($source_field, $field_values) : self::get_lead_field_value($lead, $source_field); - $is_value_match = self::is_value_match($field_value, $rule["value"], $rule["operator"], $source_field); + $is_value_match = self::is_value_match( $field_value, $rule['value'], $rule['operator'], $source_field, $rule, $form ); if($is_value_match) $match_count++; @@ -2004,7 +2012,7 @@ public static function prepare_value($form, $field, $value, $input_name, $lead_i break; case "date" : - $value = self::prepare_date($field["dateFormat"], $value); + $value = self::prepare_date( rgar( $field, 'dateFormat' ), $value); break; @@ -2792,7 +2800,7 @@ private static function move_temp_file($form_id, $tempfile_info){ } } - private static function set_permissions($path){ + public static function set_permissions($path){ $permission = apply_filters("gform_file_permission", 0644, $path); if($permission){ @@ -4094,7 +4102,60 @@ private static function get_field_filters_where($form_id, $search_criteria) { break; case "global": - $sql_array[] = $wpdb->prepare("value $operator %s", $search_term); + // include choice text + $forms = array(); + if ( $form_id == 0 ) { + $forms = GFAPI::get_forms(); + } elseif ( is_array( $form_id ) ) { + foreach ( $form_id as $id ){ + $forms[] = GFAPI::get_form( $id ); + } + } else { + $forms[] = GFAPI::get_form( $form_id ); + } + + $choice_texts_clauses = array(); + foreach ( $forms as $form ) { + if ( isset( $form['fields'] ) ) { + $choice_texts_clauses_for_form = array(); + foreach ( $form['fields'] as $field ) { + $choice_texts_clauses_for_field = array(); + if ( isset( $field['choices'] ) && is_array( $field['choices'] ) ) { + foreach ( $field['choices'] as $choice ) { + if ( ( $operator == '=' && strtolower( $choice['text'] ) == strtolower( $val ) ) || ( $operator == 'like' && strpos( strtolower( $choice['text'] ), strtolower( $val ) ) !== false ) ) { + if ( rgar( $field, 'gsurveyLikertEnableMultipleRows' ) ){ + $choice_value = '%' . $choice['value'] . '%' ; + $choice_search_operator = 'like'; + } else { + $choice_value = $choice['value']; + $choice_search_operator = '='; + } + $choice_texts_clauses_for_field[] = $wpdb->prepare( "field_number BETWEEN %s AND %s AND value {$choice_search_operator} %s", (float) $field['id'] - 0.0001, (float) $field['id'] + 0.9999, $choice_value ); + } + } + } + if ( ! empty( $choice_texts_clauses_for_field ) ) { + $choice_texts_clauses_for_form[] = join( ' OR ', $choice_texts_clauses_for_field ); + } + } + } + if ( ! empty( $choice_texts_clauses_for_form ) ) { + $choice_texts_clauses[] = '(l.form_id = ' . $form['id'] . ' AND (' . join( ' OR ', $choice_texts_clauses_for_form ) . ' ))'; + } + } + $choice_texts_clause = ''; + if ( ! empty( $choice_texts_clauses) ){ + $choice_texts_clause = join( ' OR ', $choice_texts_clauses ); + $choice_texts_clause = " + l.id IN ( + SELECT + lead_id + FROM {$lead_details_table_name} + WHERE {$choice_texts_clause} ) OR "; + } + + $choice_value_clause = $wpdb->prepare( "value {$operator} %s", $search_term ); + $sql_array[] = '(' . $choice_texts_clause . $choice_value_clause . ')'; break; case "meta": /* doesn't support "<>" for multiple values of the same key */ diff --git a/gravityforms.php b/gravityforms.php index 421849f..e016f5f 100644 --- a/gravityforms.php +++ b/gravityforms.php @@ -3,14 +3,14 @@ Plugin Name: Gravity Forms Plugin URI: http://www.gravityforms.com Description: Easily create web forms and manage form entries within the WordPress admin. -Version: 1.8.9 +Version: 1.8.13 Author: rocketgenius Author URI: http://www.rocketgenius.com Text Domain: gravityforms Domain Path: /languages ------------------------------------------------------------------------ -Copyright 2009-2013 Rocketgenius Inc. +Copyright 2009-2014 Rocketgenius Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -76,11 +76,11 @@ if(!defined("GRAVITY_MANAGER_PROXY_URL")) define('GRAVITY_MANAGER_PROXY_URL', 'http://proxy.gravityplugins.com'); -require_once( plugin_dir_path( __FILE__ ). '/common.php'); -require_once( plugin_dir_path( __FILE__ ). '/forms_model.php'); -require_once( plugin_dir_path( __FILE__ ). '/widget.php'); -require_once( plugin_dir_path( __FILE__ ) . '/includes/api.php'); -require_once( plugin_dir_path( __FILE__ ) . '/includes/webapi/webapi.php'); +require_once( plugin_dir_path( __FILE__ ) . 'common.php' ); +require_once( plugin_dir_path( __FILE__ ) . 'forms_model.php' ); +require_once( plugin_dir_path( __FILE__ ) . 'widget.php' ); +require_once( plugin_dir_path( __FILE__ ) . 'includes/api.php' ); +require_once( plugin_dir_path( __FILE__ ) . 'includes/webapi/webapi.php' ); // GFCommon::$version is deprecated, set it to current version for backwards compat GFCommon::$version = GFForms::$version; @@ -103,9 +103,20 @@ add_action("admin_footer", array("RGForms", "no_conflict_mode_style"), 1); } +add_action( 'plugins_loaded', array( 'GFForms', 'loaded' ) ); + class GFForms { - public static $version = '1.8.9'; + public static $version = '1.8.13'; + + public static function loaded(){ + do_action( 'gform_loaded' ); + + //initializing Add-Ons if necessary + if ( class_exists( 'GFAddOn' ) ) { + GFAddOn::init_addons(); + } + } public static function has_members_plugin(){ return function_exists( 'members_get_capabilities' ); @@ -237,7 +248,7 @@ public static function init(){ } else{ - add_action('wp_enqueue_scripts', array('RGForms', 'enqueue_scripts')); + add_action('wp_enqueue_scripts', array('RGForms', 'enqueue_scripts'), 11 ); add_action('wp', array('RGForms', 'ajax_parse_request'), 10); } @@ -794,7 +805,7 @@ public static function premium_update( $premium_update ){ return $premium_update; } - private static function drop_index($table, $index){ + public static function drop_index($table, $index){ global $wpdb; $has_index = $wpdb->get_var("SHOW INDEX FROM {$table} WHERE Key_name='{$index}'"); if($has_index){ @@ -1888,7 +1899,7 @@ public static function resend_notifications(){ if(!is_array($notifications)) die(__("No notifications have been selected. Please select a notification to be sent.", "gravityforms")); - if(rgpost('sendTo') && GFCommon::is_invalid_or_empty_email(rgpost('sendTo'))) + if( ! rgempty( 'sendTo', $_POST ) && ! GFCommon::is_valid_email_list(rgpost('sendTo'))) die(__("The Send To email address provided is not valid.", "gravityforms")); foreach($leads as $lead_id){ diff --git a/images/chosen-sprite.png b/images/chosen-sprite.png index f20db4439ea5c1038126bf326c8fd048b03a8226..3611ae4ace1c4b1cbeacd6145b5a79cbc72e0bdc 100644 GIT binary patch literal 646 zcmV;10(t$3P)0006_Nkl&pbAC0n?)s%2x5M$#UgGxI1~gymp~v; zh<`zGaTJP5BybQY4tlRo;SIcmE0t>ueW3>*u6N;@_u;;|BoL8PuhZ#FWY9$(flan1oVvxDBL8~}0Q5z;^2p>Ov z7}Q$E7=l>$BZLUt1*uKMCaQwKYf$lsJCyerWMd+%BeGH6f_f&Vpy%=$BN%uK%Ahxi zF+%Jj=Pc-WXF;djSiJw|m4>cN%^Fi|FBZ!E{_yJLS?RI<3U696XLkQSs z{{&kQJ$K(#5CgC1;GbA>mjm56zJZ^-Hg2_ASKI_K@CybPh7Rq}8ud``)NM~eZx}qT z)oK?Lf>t!B;%Uh}*P+)Ef?jbx#w|BNEVb(l{2LK}m#fw4xx>ddF;&j}!S{N-e!<&Q z?kvzyI_AT@H-u4tUz1h&GCh8>?TnA~?BZ7WGP<9`r gQ6DuZO!_~60ju@{TzXF%TmS$707*qoM6N<$g2#CqL;wH) literal 742 zcmeAS@N?(olHy`uVBq!ia0vp^HbAV#!3-qV=X2}@QlA5SLR>pKI{yFvKXc~Hw6wJT z{{AOVo_zoQeZqtZ&!0cvw{PF?-@ki%d;k6WS6EoMdiClhOP1WeeS7cTz4PYH`}FD4 zt5>h?-n~0()~rX59=&++V%xTD`T6-@zI<7}eEIzO^LOst`S@T)vFse zZ0PFhnmc#y*RNl9?AVc)msea|{PX9}Ns}gR+O%o+?%jtD9eVii;l+y=r%jvo;K760 zvu76+6kNZ4ed^SyPoF-WIC0|Z*ROy4_>r5N`~Lm=&!0c{_4O@WxbWAnUpYBBmoHy_ z_Uzfgg9n!`T{?O4j}$9Asc%4D@ty45_&F_R{g9Lk0qD52mW_e8hCD#Hn3?L-tbj`>OxT zJ7v;md~}?7W?s>W`VVqX@=db;D+pYCKd;4N)z`osoP6iyoB9teW8`B#?2;Ii#BfGM zL+6u_bqvF)z6Qwy7F^e#>{}{m61e02bdHnN$L$~3eq~pF@_OO1hcV%@q4${;^UfV+ znXY)w;%ghbu4vj9l}FCEd^hZyc+KPP6}AS4MsdBpQGw+X69gF?tV83O8O(MiJx^-A zboXW1bFqq*pAC;_YOi~??#RV$D!*(*_VfK;FjaJ|%YuJ~uPm<26>Fce&`YSSyXC`g zaTdR+Ec5IClowvmjG1!3;Krqz>yXh1n|0hQBP{j4uqq`I2WP9&Sn{}I8xJi*&v*QL&+Dw-Bf-CQLyLk0Ht2-;T zynum$iPO`?F{C2y?bYjfj|~J`6Xz~`vM4Ef+U{Vpli%)D%kKSey_RG0Bi9Xw4jtOb z@!)?~_%DVelO793W#Pl3vjdNCDTnGGb(^YY+BbF2;mJK!nq}@nBGoHxCn#7X*gdxr z+~ZQF6rpL6;MDP)JzehcJBL53AM-QU?@65Plc4-}1EW@`H@EEGrnFmTubZ~5iUzVn zrZYyBIm|RmW$3F@+wkq2)c>|mGh5Rv3%(p~zjStyruBl(TP2_51LpTH2noN*e&}J; z1;$+4EpJ(Mb+^1}Fv>ms%b`r}+KYy~zf5x(4?8l28%eNnEHzx({;NGP)_hX&tEw9t zSKv=Qjt(d#~b;F7hbDdUu$OUK8iumkkl&-=~$APCd2zdqHg6@=Z#Pt*5RY_s@Hw*YS9+ z^u)7AmzM6Ux!dus_!gJY)Vtf?+t>a3wO2S)_Vct=T}#@RuG(h!d8WYZS9Tst+VfKv zt~zntPsvfyqLY`klZSPslCz_dlcSRJLa$Px)_+W2Y&u!?oJrIMCNTz2S3j3^P6 array(), 'inactive' => array() ); /** * Class constructor which hooks the instance into the WordPress init action @@ -118,7 +120,51 @@ function __construct() { $this->pre_init(); } - /** + /** + * Registers an addon so that it gets initialized appropriately + * + * @param string $class - The class name + * @param string $overrides - Specify the class to replace/override + */ + public static function register( $class, $overrides = null ){ + + //Ignore classes that have been marked as inactive + if ( in_array( $class, self::$_registered_addons['inactive'] ) ) { + return; + } + + //Mark classes as active. Override existing active classes if they are supposed to be overridden + $index = array_search( $overrides, self::$_registered_addons['active'] ); + if ( $index !== false ){ + self::$_registered_addons['active'][ $index ] = $class; + } else { + self::$_registered_addons['active'][] = $class; + } + + //Mark overridden classes as inactive. + if ( ! empty( $overrides ) ){ + self::$_registered_addons['inactive'][] = $overrides; + } + + + } + + /** + * Target of gform_init Gravity Forms hook. Initializes all addons. + */ + public static function init_addons(){ + + //Removing duplicate add-ons + $active_addons = array_unique(self::$_registered_addons['active']); + + foreach ( $active_addons as $addon ){ + + call_user_func( array( $addon, 'get_instance' ) ); + + } + } + + /** * Gets executed before all init functions. Override this function to perform initialization tasks that must be done prior to init */ public function pre_init(){ @@ -1038,21 +1084,24 @@ protected function get_setting( $setting_name, $default_value = "" , $settings = if( ! $settings ) $settings = $this->get_current_settings(); - if (false === $settings) + if (false === $settings) { return $default_value; + } if (strpos($setting_name, "[") !== false) { $path_parts = explode("[", $setting_name); foreach ($path_parts as $part) { $part = trim($part, "]"); - if (false === isset($settings[$part])) + if (false === isset($settings[$part])) { return $default_value; + } $settings = rgar($settings, $part); } $setting = $settings; } else { - if (false === isset($settings[$setting_name])) + if (false === isset($settings[$setting_name])) { return $default_value; + } $setting = $settings[$setting_name]; } @@ -1320,54 +1369,96 @@ protected function settings_hidden($field, $echo = true) { return $html; } - /*** - * Renders and initializes a checkbox field or a collection of checkbox fields based on the $field array - * - * @param array $field - Field array containing the configuration options of this field - * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string - * @return string The HTML for the field - */ - protected function settings_checkbox( $field, $echo = true ) { - - $field["type"] = "checkbox"; //making sure type is set to checkbox - - $default_attributes = array("onclick" => 'jQuery(this).siblings("input[type=hidden]").val(jQuery(this).prop("checked") ? 1 : 0);'); - $field_attributes = $this->get_field_attributes($field, $default_attributes); - $horizontal = rgar($field, "horizontal") ? " gaddon-setting-inline" : ""; - - $html = ""; - - if(is_array($field["choices"])){ - foreach( $field["choices"] as $choice ) { - $choice['id'] = $choice['name']; - $choice_attributes = $this->get_choice_attributes($choice, $field_attributes); - $value = $this->get_setting($choice['name'], rgar($choice, "default_value")); - $tooltip = isset( $choice['tooltip'] ) ? gform_tooltip( $choice['tooltip'], rgar( $choice, 'tooltip_class'), true ) : ""; - $hidden_field_value = $value == '1' ? '1' : '0'; - $html .= ' -
- - - -
- '; - } - } - - if( $this->field_failed_validation( $field ) ) - $html .= $this->get_error_icon( $field ); - - if ($echo) - echo $html; - - return $html; - } - - /*** + /*** + * Renders and initializes a checkbox field or a collection of checkbox fields based on the $field array + * + * @param array $field - Field array containing the configuration options of this field + * @param bool $echo = true - true to echo the output to the screen, false to simply return the contents as a string + * + * @return string The HTML for the field + */ + protected function settings_checkbox( $field, $echo = true ) { + + $field['type'] = 'checkbox'; //making sure type is set to checkbox + + $default_attributes = array( 'onclick' => 'jQuery(this).siblings("input[type=hidden]").val(jQuery(this).prop("checked") ? 1 : 0);' ); + $field_attributes = $this->get_field_attributes( $field, $default_attributes ); + $horizontal = rgar( $field, 'horizontal' ) ? ' gaddon-setting-inline' : ''; + + $html = ''; + + if ( is_array( $field['choices'] ) ) { + foreach ( $field['choices'] as $choice ) { + $choice['id'] = sanitize_title($choice['name']); + $choice_attributes = $this->get_choice_attributes( $choice, $field_attributes ); + $value = $this->get_setting( $choice['name'], rgar( $choice, 'default_value' ) ); + $tooltip = isset( $choice['tooltip'] ) ? gform_tooltip( $choice['tooltip'], rgar( $choice, 'tooltip_class' ), true ) : ''; + + $html .= $this->checkbox_item( $choice, $horizontal, $choice_attributes, $value, $tooltip ); + + } + } + + if ( $this->field_failed_validation( $field ) ) + $html .= $this->get_error_icon( $field ); + + if ( $echo ) + echo $html; + + return $html; + } + + + /** + * Returns the markup for an individual checkbox item give the parameters + * + * @param $choice - Choice array with all configured properties + * @param $horizontal_class - CSS class to style checkbox items horizontally + * @param $attributes - String containing all the attributes for the input tag. + * @param $value - Currently selection (1 if field has been checked. 0 or null otherwise) + * @param $tooltip - String containing a tooltip for this checkbox item. + * + * @return string - The markup of an individual checkbox item + */ + protected function checkbox_item( $choice, $horizontal_class, $attributes, $value, $tooltip ) { + $hidden_field_value = $value == '1' ? '1' : '0'; + $checkbox_item = ' +
+ '; + + if ( is_callable( array( $this, "checkbox_input_{$choice['name']}" ) ) ) { + $markup = call_user_func( array( $this, "checkbox_input_{$choice['name']}" ), $choice, $attributes, $value, $tooltip ); + } else { + $markup = $this->checkbox_input( $choice, $attributes, $value, $tooltip ); + } + + $checkbox_item .= $markup . '
'; + + return $checkbox_item; + } + + /** + * Returns the markup for an individual checkbox input and its associated label + * + * @param $choice - Choice array with all configured properties + * @param $attributes - String containing all the attributes for the input tag. + * @param $value - Currently selection (1 if field has been checked. 0 or null otherwise) + * @param $tooltip - String containing a tooltip for this checkbox item. + * + * @return string - The markup of an individual checkbox input and its associated label + */ + protected function checkbox_input( $choice, $attributes, $value, $tooltip ) { + $markup = ' + '; + + return $markup; + } + + + /*** * Renders and initializes a radio field or a collection of radio fields based on the $field array * * @param array $field - Field array containing the configuration options of this field @@ -1483,8 +1574,9 @@ public function settings_field_map( $field, $echo = true ) { $html = ''; $field_map = rgar( $field, 'field_map' ); - if( empty( $field_map ) ) + if( empty( $field_map ) ) { return $html; + } $form_id = rgget( 'id' ); @@ -1591,7 +1683,7 @@ public function get_mapped_field_name( $parent_field, $field_name ) { public static function get_field_map_fields( $feed, $field_name ) { $fields = array(); - $prefix = "field_map_{$field_name}_"; + $prefix = "{$field_name}_"; foreach( $feed['meta'] as $name => $value ) { if( strpos( $name, $prefix ) === 0 ) { @@ -1782,14 +1874,13 @@ protected function settings_save( $field, $echo = true ) { protected function simple_condition($setting_name_root){ $conditional_fields = $this->get_conditional_logic_fields(); - $create_condition_value_script = ""; $str = $this->settings_select(array( "name" => "{$setting_name_root}_field_id", "type" => "select", "choices" => $conditional_fields, "class" => "optin_select", - "onchange" => "jQuery('#" . esc_attr($setting_name_root) . "_container').html(GetRuleValues('gf_setting', 0, jQuery(this).val(), '', '_gaddon_setting_" . esc_attr($setting_name_root) . "_value'));" + "onchange" => "jQuery('#" . esc_attr($setting_name_root) . "_container').html(GetRuleValues('simple_condition_{$setting_name_root}', 0, jQuery(this).val(), '', '_gaddon_setting_" . esc_attr($setting_name_root) . "_value'));" ), false); $str .= $this->settings_select(array( @@ -1831,10 +1922,25 @@ protected function simple_condition($setting_name_root){ $field_id = $this->get_setting("{$setting_name_root}_field_id"); - if(!empty($field_id)){ - $current_condition_value = $this->get_setting("{$setting_name_root}_value"); - $str .= ""; - } + $value = $this->get_setting("{$setting_name_root}_value"); + $operator = $this->get_setting("{$setting_name_root}_operator"); + + $str .= ""; return $str; } @@ -1849,7 +1955,7 @@ protected function get_field_attributes($field, $default = array()){ // each nonstandard property will be extracted from the $props array so it is not auto-output in the field HTML $no_output_props = apply_filters( 'gaddon_no_output_field_properties', array( 'default_value', 'label', 'choices', 'feedback_callback', 'checked', 'checkbox_label', 'value', 'type', - 'validation_callback', 'required', 'hidden', 'tooltip', 'dependency', "messages" ), $field ); + 'validation_callback', 'required', 'hidden', 'tooltip', 'dependency', 'messages', 'name' ), $field ); $default_props = array( 'class' => '', // will default to gaddon-setting @@ -2667,11 +2773,11 @@ protected function form_settings_fields($form){ protected function plugin_settings_init() { $subview = rgget("subview"); RGForms::add_settings_page( array( - 'name' => $this->get_short_title(), + 'name' => $this->_slug, 'tab_label' => $this->get_short_title(), 'handler' => array($this, 'plugin_settings_page') ) ); - if (rgget("page") == "gf_settings" && $subview == $this->get_short_title() && $this->current_user_can_any($this->_capabilities_settings_page)) { + if (rgget("page") == "gf_settings" && $subview == $this->_slug && $this->current_user_can_any($this->_capabilities_settings_page)) { require_once(GFCommon::get_base_path() . "/tooltips.php"); } diff --git a/includes/addon/class-gf-feed-addon.php b/includes/addon/class-gf-feed-addon.php index c1ebbf9..ea7c506 100644 --- a/includes/addon/class-gf-feed-addon.php +++ b/includes/addon/class-gf-feed-addon.php @@ -30,6 +30,14 @@ public function init_frontend() { } + public function init_ajax() { + + parent::init_ajax(); + + add_action( "wp_ajax_gf_feed_is_active_{$this->_slug}", array( $this, 'ajax_toggle_is_active' ) ); + + } + protected function setup(){ parent::setup(); @@ -112,35 +120,41 @@ protected function uninstall(){ public function maybe_process_feed( $entry, $form, $is_delayed = false ) { - $paypal_feed = $this->get_paypal_feed( $form['id'], $entry ); - $has_payment = self::get_paypal_payment_amount($form, $entry, $paypal_feed) > 0; + //Getting all active feeds for current addon + $feeds = $this->get_feeds( $form['id'] ); + + //Aborting if delayed payment is configured + if ( ! empty( $feeds ) ) { + $is_delayed_payment_configured = $this->is_delayed_payment( $entry, $form, $is_delayed ); - if( $paypal_feed && rgar( $paypal_feed['meta'], "delay_{$this->_slug}" ) && $has_payment && !$is_delayed ) { - self::log_debug( "Feed processing delayed pending PayPal payment received for entry {$entry['id']}" ); - return $entry; - } + if ( $is_delayed_payment_configured ) { + $this->log_debug( "Feed processing delayed pending PayPal payment received for entry {$entry['id']}" ); - // getting all active feeds - $feeds = $this->get_feeds( $form['id'] ); + return $entry; + } + } + //Processing feeds $processed_feeds = array(); foreach ( $feeds as $feed ) { - if ( $this->is_feed_condition_met( $feed, $form, $entry ) ) { + if ( $feed['is_active'] && $this->is_feed_condition_met( $feed, $form, $entry ) ) { $this->process_feed( $feed, $entry, $form ); - $processed_feeds[] = $feed["id"]; + $processed_feeds[] = $feed['id']; } else { - $this->log_debug( "Opt-in condition not met; not fulfilling entry {$entry["id"]} to list" ); + $this->log_debug( 'Opt-in condition not met or feed is inactive, not processing feed for entry #' . $entry['id'] . ". Feed Status: " . $feed['is_active'] ); } } - if(!empty($processed_feeds)){ - $meta = gform_get_meta($entry["id"], "processed_feeds"); - if(empty($meta)) + //Saving processed feeds + if( ! empty( $processed_feeds ) ){ + $meta = gform_get_meta( $entry['id'], 'processed_feeds' ); + if( empty($meta) ) { $meta = array(); + } $meta[$this->_slug] = $processed_feeds; - gform_update_meta( $entry["id"], "processed_feeds", $meta ); + gform_update_meta( $entry['id'], 'processed_feeds', $meta ); } return $entry; @@ -282,10 +296,6 @@ public function delete_feeds($form_id = null){ public function form_settings_init(){ parent::form_settings_init(); - - if (RG_CURRENT_PAGE == "admin-ajax.php") { - add_action("wp_ajax_gf_feed_is_active_{$this->_slug}", array($this, 'ajax_toggle_is_active')); - } } public function ajax_toggle_is_active(){ @@ -814,6 +824,21 @@ protected function has_feed( $form_id, $meets_conditional_logic = null ) { //does not require that feed meets conditional logic. return true since there are feeds return true; } + + protected function is_delayed_payment( $entry, $form, $is_delayed ) { + if ( $this->_slug == 'gravityformspaypal' ) { + return false; + } + + $paypal_feed = $this->get_paypal_feed( $form['id'], $entry ); + if ( ! $paypal_feed ) { + return false; + } + + $has_payment = self::get_paypal_payment_amount( $form, $entry, $paypal_feed ) > 0; + + return rgar( $paypal_feed['meta'], "delay_{$this->_slug}" ) && $has_payment && ! $is_delayed; + } } diff --git a/includes/addon/class-gf-payment-addon.php b/includes/addon/class-gf-payment-addon.php index ab4bd90..d009923 100644 --- a/includes/addon/class-gf-payment-addon.php +++ b/includes/addon/class-gf-payment-addon.php @@ -15,7 +15,7 @@ require_once('class-gf-feed-addon.php' ); abstract class GFPaymentAddOn extends GFFeedAddOn { - private $_payment_version = "1.1"; + private $_payment_version = "1.2"; /** @@ -31,9 +31,14 @@ abstract class GFPaymentAddOn extends GFFeedAddOn { protected $_supports_callbacks = false; protected $authorization = array(); + protected $redirect_url = ''; + protected $current_feed = false; + protected $current_submission_data = false; + protected $is_payment_gateway = false; - //--------- Initialization ---------- + + //--------- Initialization ---------- public function pre_init(){ parent::pre_init(); @@ -61,16 +66,18 @@ public function init_admin() { } } - public function init_frontend(){ + public function init_frontend() { parent::init_frontend(); - add_filter("gform_confirmation", array($this, "confirmation"), 20, 4); + add_filter( "gform_confirmation", array( $this, "confirmation" ), 20, 4 ); + + add_filter( "gform_validation", array( $this, "validation" ), 20 ); + add_filter( "gform_entry_post_save", array( $this, "entry_post_save" ), 10, 2 ); - add_filter("gform_validation", array($this, "validation")); - add_filter("gform_entry_post_save", array($this, "entry_post_save"), 10, 2); } + public function init_ajax(){ parent::init_ajax(); @@ -119,7 +126,7 @@ private function upgrade_payment($previous_versions) { date_created datetime, PRIMARY KEY (id), KEY lead_id (lead_id), - KEY trasanction_type (transaction_type), + KEY transaction_type (transaction_type), KEY type_lead (lead_id,transaction_type) ) $charset_collate;"; @@ -134,10 +141,14 @@ private function upgrade_payment($previous_versions) { callback_id varchar(250), date_created datetime, PRIMARY KEY (id), - KEY slug_callback_id (addon_slug,callback_id) + KEY addon_slug_callback_id (addon_slug(50),callback_id(100)) ) $charset_collate;"; GFFormsModel::dbDelta($sql); + + //droping legacy index + GFForms::drop_index( "{$wpdb->prefix}gf_addon_payment_callback", 'slug_callback_id' ); + } @@ -146,25 +157,15 @@ private function upgrade_payment($previous_versions) { //--------- Submission Process ------ public function confirmation($confirmation, $form, $entry, $ajax){ - if(!$this->payment_method_is_overridden('redirect_url')) - return $confirmation; - - $feed = $this->get_payment_feed($entry, $form); - - if(!$feed){ - $this->log_debug("No payment feed was located for form_id = " . $form["id"] . " - NOT sending to " . $this->_slug); - return $confirmation; + if ( empty( $this->redirect_url ) ) { + return $confirmation; } - $submission_data = $this->get_submission_data($feed, $form, $entry); + $confirmation = array( 'redirect' => $this->redirect_url ); - $url = $this->redirect_url($feed, $submission_data, $form, $entry); + return $confirmation; - if($url) - $confirmation = array("redirect" => $url); - - return $confirmation; - } + } /** * Override this function to specify a URL to the third party payment processor. Useful when developing a payment gateway that processes the payment outsite of the website (i.e. PayPal Standard). @@ -180,57 +181,63 @@ protected function redirect_url($feed, $submission_data, $form, $entry){ public function validation( $validation_result ) { - if( ! GFFormDisplay::is_last_page( $validation_result['form'] ) ) - return $validation_result; + if ( ! $validation_result['is_valid'] || ! GFFormDisplay::is_last_page( $validation_result['form'] ) ) { + return $validation_result; + } - $has_authorize = $this->payment_method_is_overridden('authorize'); - $has_subscribe = $this->payment_method_is_overridden('subscribe'); - if(!$has_authorize && !$has_subscribe) - return $validation_result; + $form = $validation_result['form']; + $entry = GFFormsModel::create_lead( $form ); + $feed = $this->get_payment_feed( $entry, $form ); - //Getting submission data - $form = $validation_result["form"]; - $entry = GFFormsModel::create_lead($form); - $feed = $this->get_payment_feed($entry, $form); + if ( ! $feed ) { + return $validation_result; + } - if(!$feed) - return $validation_result; + $submission_data = $this->get_submission_data( $feed, $form, $entry ); - $do_authorization = $has_authorize && $feed["meta"]["transactionType"] == "product"; - $do_subscription = $has_subscribe && $feed["meta"]["transactionType"] == "subscription"; + //Do not process payment if payment amount is 0 or less + if ( floatval( $submission_data['payment_amount'] ) <= 0 ) { - if(!$do_authorization && !$do_subscription) - return $validation_result; + $this->log_debug( 'Payment amount is $0.00 or less. Not sending to payment gateway.' ); - $submission_data = $this->get_submission_data($feed, $form, $entry); + return $validation_result; + } - //Running an authorization only transaction if function is implemented and this is a single payment - if($do_authorization){ - $this->authorization = $this->authorize($feed, $submission_data, $form, $entry); - } - else if($do_subscription){ + $this->is_payment_gateway = true; + $this->current_feed = $feed; + $this->current_submission_data = $submission_data; - $subscription = $this->subscribe( $feed, $submission_data, $form, $entry ); + $performed_authorization = false; + $is_subscription = $feed["meta"]["transactionType"] == "subscription"; - $this->authorization["is_authorized"] = $subscription["is_success"]; - $this->authorization["error_message"] = rgar($subscription, "error_message"); - $this->authorization["subscription"] = $subscription; + if ( $this->payment_method_is_overridden( 'authorize' ) && ! $is_subscription ) { - } + //Running an authorization only transaction if function is implemented and this is a single payment + $this->authorization = $this->authorize( $feed, $submission_data, $form, $entry ); + $performed_authorization = true; - $this->authorization["feed"] = $feed; - $this->authorization["submission_data"] = $submission_data; + } else if ( $this->payment_method_is_overridden( 'subscribe' ) && $is_subscription ) { - if(!$this->authorization["is_authorized"]){ - $validation_result = $this->get_validation_result($validation_result, $this->authorization); + $subscription = $this->subscribe( $feed, $submission_data, $form, $entry ); - //Setting up current page to point to the credit card page since that will be the highlighted field - GFFormDisplay::set_current_page($validation_result["form"]["id"], $validation_result["credit_card_page"]); - } + $this->authorization['is_authorized'] = $subscription['is_success']; + $this->authorization['error_message'] = rgar( $subscription, 'error_message' ); + $this->authorization['subscription'] = $subscription; - return $validation_result; - } + $performed_authorization = true; + } + + if ( $performed_authorization && ! $this->authorization['is_authorized'] ) { + $validation_result = $this->get_validation_result( $validation_result, $this->authorization ); + + //Setting up current page to point to the credit card page since that will be the highlighted field + GFFormDisplay::set_current_page( $validation_result['form']['id'], $validation_result['credit_card_page'] ); + } + + return $validation_result; + + } /** * Override this method to add integration code to the payment processor in order to authorize a credit card with or without capturing payment. This method is executed during the form validation process and allows @@ -332,62 +339,68 @@ protected function get_validation_result($validation_result, $authorization_resu public function entry_post_save($entry, $form){ - //Abort if authorization wasn't done. - if(empty($this->authorization)) - return $entry; + if ( ! $this->is_payment_gateway ){ + return $entry; + } - $feed = $this->authorization["feed"]; + $feed = $this->current_feed; - if($feed["meta"]["transactionType"] == "product"){ + if ( ! empty( $this->authorization ) ) { + //If an authorization was done, capture it - if($this->payment_method_is_overridden('capture') && rgempty("captured_payment", $this->authorization)){ - $capture_response = $this->capture($this->authorization, $feed, $this->authorization["submission_data"], $form, $entry); - $this->authorization["captured_payment"] = $capture_response; - } + if ( $feed['meta']['transactionType'] == 'subscription' ) { - $entry = $this->process_capture($this->authorization, $feed, $this->authorization["submission_data"], $form, $entry); + $entry = $this->process_subscription( $this->authorization, $feed, $this->current_submission_data, $form, $entry ); - } - else if($feed["meta"]["transactionType"] == "subscription"){ + } else { - $entry = $this->process_subscription($this->authorization, $feed, $this->authorization["submission_data"], $form, $entry); + if ( $this->payment_method_is_overridden( 'capture' ) && rgempty( 'captured_payment', $this->authorization ) ) { - } + $this->authorization['captured_payment'] = $this->capture( $this->authorization, $feed, $this->current_submission_data, $form, $entry ); - gform_update_meta($entry["id"], "payment_gateway", $this->_slug); + } - return $entry; - } + $entry = $this->process_capture( $this->authorization, $feed, $this->current_submission_data, $form, $entry ); + } + } + else if ( $this->payment_method_is_overridden( 'redirect_url' ) ){ - protected function process_capture($authorization, $feed, $submission_data, $form, $entry){ + //If the url_redirect() function is overridden, call it. - $payment = rgar($authorization,"captured_payment"); - if(empty($payment)) - return $entry; + //Getting URL to redirect to ( saved to be used by the confirmation() function ) + $this->redirect_url = $this->redirect_url( $feed, $this->current_submission_data, $form, $entry ); + + //Setting transaction_type to subscription or one time payment + $entry['transaction_type'] = rgars( $feed, 'meta/transactionType' ) == 'subscription' ? 2 : 1; - if($payment["is_success"]){ + } + + //Saving which gateway was used to process this entry + gform_update_meta( $entry['id'], 'payment_gateway', $this->_slug ); - $entry["transaction_id"] = $payment["transaction_id"]; - $entry["transaction_type"] = "1"; - $entry["is_fulfilled"] = true; - $entry["currency"] = GFCommon::get_currency(); - $entry["payment_amount"] = $payment["amount"]; - $entry["payment_status"] = "Paid"; - $entry["payment_date"] = gmdate("Y-m-d H:i:s"); - $entry["payment_method"] = $payment["payment_method"]; + return $entry; - $this->insert_transaction($entry["id"], "payment", $entry["transaction_id"], $entry["payment_amount"]); + } + + protected function process_capture($authorization, $feed, $submission_data, $form, $entry){ + $payment = rgar( $authorization, 'captured_payment' ); + if( empty( $payment ) ) { + return $entry; + } - $this->add_note($entry["id"], sprintf(__("Payment has been captured successfully. Amount: %s. Transaction Id: %s", "gravityforms"), GFCommon::to_money($payment["amount"], $entry["currency"]),$payment["transaction_id"]), "success"); + if( $payment['is_success'] ){ + $entry['is_fulfilled'] = '1'; + $payment["payment_status"] = "Paid"; + $payment["payment_date"] = gmdate("Y-m-d H:i:s"); + $this->complete_payment( $entry, $payment ); } - else{ + else { $entry["payment_status"] = "Failed"; $this->add_note($entry["id"], sprintf( __("Payment failed to be captured. Reason: %s", "gravityforms") , $payment["error_message"] ), "error"); + GFAPI::update_entry($entry); } - GFAPI::update_entry($entry); - return $entry; } @@ -467,7 +480,7 @@ public function get_payment_feed( $entry, $form = false ) { $feeds = $this->get_feeds( $form['id'] ); foreach ( $feeds as $feed ) { - if ( $this->is_feed_condition_met( $feed, $form, $entry ) ){ + if ( $feed['is_active'] && $this->is_feed_condition_met( $feed, $form, $entry ) ){ $submission_feed = $feed; break; } @@ -477,9 +490,25 @@ public function get_payment_feed( $entry, $form = false ) { return $submission_feed; } - protected function is_payment_gateway($entry_id){ - $feeds = $this->get_feeds_by_entry($entry_id); - return is_array($feeds) && count($feeds) > 0; + /** + * Returns true if the current Add-On was the one used as the payment gateway for the specified entry. + * + * NOTE: For plugins overriding the redirect_url() function, there could be inconsistencies when using this function during the submission process + * + * @param $entry_id + * + * @return bool Returns true if the current Add-On was the one used as the payment gateway for the specified entry. + * + */ + protected function is_payment_gateway($entry_id){ + + if ( $this->is_payment_gateway ){ + return true; + } + + $gateway = gform_get_meta($entry_id, 'payment_gateway'); + + return $gateway == $this->_slug; } protected function get_submission_data($feed, $form, $entry){ @@ -544,35 +573,49 @@ protected function get_order_data($feed, $form, $entry){ $options = array(); if(is_array(rgar($product, "options"))){ foreach($product["options"] as $option){ - $options[] = $option["option_name"]; - $product_price += $option["price"]; + if ( isset( $option['option_name'] ) ){ + $options[] = $option["option_name"]; + $product_price += $option["price"]; + } } } - if(!empty($trial_field) && $trial_field == $field_id){ - $trial_amount = $product_price * $quantity; - } - else if(!empty($setup_fee_field) && $setup_fee_field == $field_id){ - $fee_amount = $product_price * $quantity; - } - else - { - if(is_numeric($payment_field) && $payment_field != $field_id) - continue; + $is_trial_or_setup_fee = false; - $amount += $product_price * $quantity; + if ( ! empty( $trial_field ) && $trial_field == $field_id ) { - $description = ""; - if(!empty($options)) - $description = __("options: ", "gravityforms") . " " . implode(", ", $options); + $trial_amount = $product_price * $quantity; + $is_trial_or_setup_fee = true; + + } else if ( ! empty( $setup_fee_field ) && $setup_fee_field == $field_id ) { + + $fee_amount = $product_price * $quantity; + $is_trial_or_setup_fee = true; + } + + //Do not add to line items if the payment field selected in the feed is not the current field. + if ( is_numeric( $payment_field ) && $payment_field != $field_id ) { + continue; + } + + //Do not add to line items if the payment field is set to "Form Total" and the current field was used for trial or setup fee. + if ( $is_trial_or_setup_fee && ! is_numeric( $payment_field ) ){ + continue; + } + + $amount += $product_price * $quantity; + + $description = ""; + if(!empty($options)) + $description = __("options: ", "gravityforms") . " " . implode(", ", $options); + + if($product_price >= 0){ + $line_items[] = array("id" => $field_id, "name"=>$product["name"], "description" =>$description, "quantity" =>$quantity, "unit_price"=>GFCommon::to_number($product_price), "options" => rgar($product, "options")); + } + else{ + $discounts[] = array("id" => $field_id, "name"=>$product["name"], "description" =>$description, "quantity" =>$quantity, "unit_price"=>GFCommon::to_number($product_price), "options" => rgar($product, "options")); + } - if($product_price >= 0){ - $line_items[] = array("id" => $field_id, "name"=>$product["name"], "description" =>$description, "quantity" =>$quantity, "unit_price"=>GFCommon::to_number($product_price), "options" => rgar($product, "options")); - } - else{ - $discounts[] = array("id" => $field_id, "name"=>$product["name"], "description" =>$description, "quantity" =>$quantity, "unit_price"=>GFCommon::to_number($product_price), "options" => rgar($product, "options")); - } - } } if ($trial_field == "enter_amount"){ @@ -608,34 +651,50 @@ public function maybe_process_callback() { // to generically process the callback data $this->log_debug("Initializing callback processing for: " . $this->_slug); - $result = $this->callback(); + $callback_action = $this->callback(); - $this->log_debug("Result from gateway callback: " . print_r($result, true)); + $this->log_debug("Result from gateway callback: " . print_r($callback_action, true)); - if( is_array( $result ) && rgar( $result, 'type' ) ) { - $result = $this->process_callback_action( $result ); + $result = false; + if(is_wp_error( $callback_action )) { + $this->display_callback_error($callback_action); } + else if($callback_action && is_array( $callback_action ) && rgar( $callback_action, 'type' ) && ! rgar($callback_action, 'abort_callback') ) { - if(is_wp_error( $result )) { - $data = $result->get_error_data(); - $status = !rgempty("status_header", $data) ? $data["status_header"] : 200; + $result = $this->process_callback_action( $callback_action ); - status_header( $status ); - echo $result->get_error_message(); + if(is_wp_error( $result )) { + $this->display_callback_error($result); } else if( !$result ){ status_header( 200 ); - echo "Callback bypassed"; + echo "Callback could not be processed."; } else { status_header( 200 ); echo 'Callback processed successfully.'; } + } + else{ + status_header( 200 ); + echo "Callback bypassed"; + } + + $this->post_callback($callback_action, $result); die(); } + private function display_callback_error($error){ + + $data = $error->get_error_data(); + $status = !rgempty("status_header", $data) ? $data["status_header"] : 200; + + status_header( $status ); + echo $error->get_error_message(); + } + /** * Processes callback based on provided data. * @@ -686,25 +745,25 @@ private function process_callback_action( $action ) { case 'refund_payment': $result = $this->refund_payment( $entry, $action ); break; - case 'fail_payment': - $result = $this->fail_payment( $entry, $action ); - break; - case 'add_pending_payment': - $result = $this->add_pending_payment( $entry, $action ); - break; - case 'void_authorization': - $result = $this->void_authorization( $entry, $action ); - break; - case 'create_subscription': - $result = $this->start_subscription($entry, $action); - break; + case 'fail_payment': + $result = $this->fail_payment( $entry, $action ); + break; + case 'add_pending_payment': + $result = $this->add_pending_payment( $entry, $action ); + break; + case 'void_authorization': + $result = $this->void_authorization( $entry, $action ); + break; + case 'create_subscription': + $result = $this->start_subscription($entry, $action); + break; case 'cancel_subscription': $feed = $this->get_payment_feed( $entry ); $result = $this->cancel_subscription( $entry, $feed, $action["note"] ); break; - case 'expire_subscription': - $result = $this->expire_subscription( $entry, $action ); - break; + case 'expire_subscription': + $result = $this->expire_subscription( $entry, $action ); + break; case 'add_subscription_payment': $result = $this->add_subscription_payment( $entry, $action ); break; @@ -719,7 +778,7 @@ private function process_callback_action( $action ) { break; } - $this->log_debug("Callback action successful? {$result}"); + $this->log_debug( 'Callback action successful? ' . print_r( $result, true ) ); if(rgar($action, "id") && $result){ $this->register_callback($action["id"], $action['entry_id']); @@ -748,6 +807,8 @@ protected function is_duplicate_callback($callback_id){ protected function callback() { } + protected function post_callback($callback_action, $result) {} + // # PAYMENT INTERACTION FUNCTIONS @@ -769,20 +830,40 @@ public function add_pending_payment( $entry, $action ){ public function complete_payment( $entry, $action ) { - if( ! $action['payment_status'] ) + if ( ! rgar($action, 'payment_status') ) { $action['payment_status'] = 'Paid'; + } - if( ! $action['transaction_type'] ) + if ( ! rgar($action, 'transaction_type') ) { $action['transaction_type'] = 'payment'; + } - if( ! $action['note'] ) { + if ( ! rgar( $action, 'payment_date' ) ) { + $action['payment_date'] = gmdate( 'y-m-d H:i:s' ); + } + + //set is_fulfilled in process_capture by gateways that are not url redirects + //url redirects should not have this set yet, happens in post_callback for them + $entry['is_fulfilled'] = "1"; + $entry['transaction_id'] = rgar ( $action, 'transaction_id' ); + $entry['transaction_type'] = "1"; + $entry['payment_status'] = $action['payment_status']; + $entry['payment_amount'] = rgar( $action, 'amount' ); + $entry['payment_date'] = $action['payment_date']; + $entry['payment_method'] = rgar( $action, 'payment_method' ); + $entry['currency'] = GFCommon::get_currency(); + + if ( ! rgar($action, 'note') ) { $amount_formatted = GFCommon::to_money( $action['amount'], $entry['currency'] ); $action['note'] = sprintf( __( 'Payment has been completed. Amount: %s. Transaction Id: %s.', 'gravityforms' ), $amount_formatted, $action['transaction_id'] ); } + - GFAPI::update_entry_property( $entry['id'], 'payment_status', $action['payment_status'] ); - $this->insert_transaction( $entry['id'], $action['transaction_type'], $action['transaction_id'], $action['amount'] ); - $this->add_note( $entry['id'], $action['note'], "success" ); + GFAPI::update_entry( $entry ); + + $this->insert_transaction( $entry['id'], $action['transaction_type'], $action['transaction_id'], $action['amount'] ); + + $this->add_note( $entry['id'], $action['note'], "success" ); do_action("gform_post_payment_completed", $entry, $action); @@ -854,18 +935,18 @@ public function void_authorization( $entry, $action ){ public function start_subscription( $entry, $subscription ) { if (!$this->has_subscription($entry)){ - $entry['payment_status'] = 'Active'; - $entry['payment_amount'] = $subscription['amount']; - $entry['payment_date'] = gmdate( 'y-m-d H:i:s' ); - $entry['transaction_id'] = $subscription['subscription_id']; - $entry['transaction_type'] = '2'; // subscription - $entry['is_fulfilled'] = true; - - $result = GFAPI::update_entry( $entry ); - - $this->add_note( $entry['id'], sprintf( __( 'Subscription has been created. Subscription Id: %s.', 'gravityforms' ), $subscription['subscription_id'] ), "success" ); - - do_action("gform_post_subscription_started", $entry, $subscription); + $entry['payment_status'] = 'Active'; + $entry['payment_amount'] = $subscription['amount']; + $entry['payment_date'] = gmdate( 'y-m-d H:i:s' ); + $entry['transaction_id'] = $subscription['subscription_id']; + $entry['transaction_type'] = '2'; // subscription + $entry['is_fulfilled'] = '1'; + + $result = GFAPI::update_entry( $entry ); + + $this->add_note( $entry['id'], sprintf( __( 'Subscription has been created. Subscription Id: %s.', 'gravityforms' ), $subscription['subscription_id'] ), "success" ); + + do_action("gform_post_subscription_started", $entry, $subscription); } return $entry; @@ -879,13 +960,7 @@ public function start_subscription( $entry, $subscription ) { * @return [null] */ public function add_subscription_payment( $entry, $action ) { - //see if a subscription has been created first, if not, create it - if (!$this->has_subscription($entry)){ - $this->start_subscription($entry, $action); - } - else{ - GFAPI::update_entry_property( $entry['id'], 'payment_amount', $action['amount'] ); - } + if( ! $action['transaction_type'] ) $action['transaction_type'] = 'payment'; @@ -932,7 +1007,6 @@ public function cancel_subscription( $entry, $feed, $note = null ) { } GFAPI::update_entry_property( $entry['id'], 'payment_status', "Cancelled" ); - $this->modify_post( rgar( $entry, 'post_id' ), rgars( $feed, 'meta/update_post_action' ) ); $this->add_note( $entry['id'], $note ); // include $subscriber_id as 3rd parameter for backwards compatibility @@ -1063,7 +1137,8 @@ public function feed_settings_fields() { "label" => __("Name", "gravityforms"), "type" => "text", "class" => "medium", - "required" => true + "required" => true, + "tooltip" => "
" . __("Name", "gravityforms") . "
" . __("Enter a feed name to uniquely identify this setup.", "gravityforms") ), array( "name"=> "transactionType", @@ -1074,7 +1149,8 @@ public function feed_settings_fields() { array("label" => __("Select a transaction type", "gravityforms"), "value" => ""), array("label" => __("Products and Services", "gravityforms"), "value" => "product"), array("label" => __("Subscription", "gravityforms"), "value" => "subscription") - ) + ), + "tooltip" => "
" . __("Transaction Type", "gravityforms") . "
" . __("Select a transaction type") ) ) ), @@ -1091,18 +1167,21 @@ public function feed_settings_fields() { "label" => __("Recurring Amount", "gravityforms"), "type" => "select", "choices" => $this->recurring_amount_choices(), - "required" => true + "required" => true, + "tooltip" => "
" . __("Recurring Amount", "gravityforms") . "
" . __("Select which field determines the recurring payment amount, or select 'Form Total' to use the total of all pricing fields as the recurring amount.", "gravityforms") ), array( "name" => "billingCycle", "label" => __("Billing Cycle", "gravityforms"), "type" => "billing_cycle", + "tooltip" => "
" . __("Billing Cycle", "gravityforms") . "
" . __("Select your billing cycle. This determines how often the recurring payment should occur.", "gravityforms") ), array( "name" => "recurringTimes", "label" => __("Recurring Times", "gravityforms"), "type" => "select", - "choices" => array(array("label" => "infinite", "value" => "0")) + $this->get_numeric_choices(1,100) + "choices" => array(array("label" => "infinite", "value" => "0")) + $this->get_numeric_choices(1,100), + "tooltip" => "
" . __("Recurring Times", "gravityforms") . "
" . __("Select how many times the recurring payment should be made. The default is to bill the customer until the subscription is canceled.", "gravityforms") ), array( "name" => "setupFee", @@ -1113,7 +1192,8 @@ public function feed_settings_fields() { "name" => "trial", "label" => __("Trial", "gravityforms"), "type" => "trial", - "hidden" => $this->get_setting("setupFee_enabled") + "hidden" => $this->get_setting("setupFee_enabled"), + "tooltip" => "
" . __("Trial Period", "gravityformspaypal") . "
" . __("Enable a trial period. The users recurring payment will not begin until after this trial period.", "gravityforms") ) ) ), @@ -1131,7 +1211,8 @@ public function feed_settings_fields() { "type" => "select", "choices" => $this->product_amount_choices(), "required" => true, - "default_value" => "form_total" + "default_value" => "form_total", + "tooltip" => "
" . __("Payment Amount", "gravityforms") . "
" . __("Select which field determines the payment amount, or select 'Form Total' to use the total of all pricing fields as the payment amount.", "gravityforms") ) ) ), @@ -1154,7 +1235,8 @@ public function other_settings_fields(){ "name" => "billingInformation", "label" => __("Billing Information", "gravityforms"), "type" => "field_map", - "field_map" => $this->billing_info_fields() + "field_map" => $this->billing_info_fields(), + "tooltip" => "
" . __("Billing Information", "gravityforms") . "
" . __("Map your Form Fields to the available listed fields.", "gravityforms") ) ); @@ -1171,7 +1253,8 @@ public function other_settings_fields(){ $other_settings[] = array( "name" => "conditionalLogic", "label" => __("Conditional Logic", "gravityforms"), - "type" => "feed_condition" + "type" => "feed_condition", + "tooltip" => "
" . __("Conditional Logic", "gravityforms") . "
" . __("When conditions are enabled, form submissions will only be sent to the payment gateway when the conditions are met. When disabled, all form submissions will be sent to the payment gateway.", "gravityforms") ); return $other_settings; @@ -1253,7 +1336,7 @@ public function settings_setup_fee( $field, $echo = true ) { public function set_trial_onchange($field){ - return "alert('firing onchange');if(jQuery(this).prop('checked')){jQuery('#{$field["name"]}_product').show('slow');if (jQuery('#{$field["name"]}_product').val() == 'enter_amount'){jQuery('#{$field["name"]}_amount').show('slow');}} else {jQuery('#{$field["name"]}_product').hide('slow');jQuery('#{$field["name"]}_amount').hide('slow');}"; + return "if(jQuery(this).prop('checked')){jQuery('#{$field["name"]}_product').show('slow');if (jQuery('#{$field["name"]}_product').val() == 'enter_amount'){jQuery('#{$field["name"]}_amount').show();}} else {jQuery('#{$field["name"]}_product').hide('slow');jQuery('#{$field["name"]}_amount').hide();}"; } @@ -1282,7 +1365,7 @@ public function settings_trial( $field, $echo = true ) { "name" => $field["name"] . "_product", "type" => "select", "class" => $this->get_setting("{$field["name"]}_enabled") ? "" : "hidden", - "onchange" => "if(jQuery(this).val() == 'enter_amount'){jQuery('#{$field["name"]}_amount').show('slow');} else {jQuery('#{$field["name"]}_amount').hide('slow');}", + "onchange" => "if(jQuery(this).val() == 'enter_amount'){jQuery('#{$field["name"]}_amount').show();} else {jQuery('#{$field["name"]}_amount').hide();}", "choices" => $payment_choices ); @@ -1292,7 +1375,7 @@ public function settings_trial( $field, $echo = true ) { $amount_field = array( "type" => "text", "name" => "{$field["name"]}_amount", - "class" => $this->get_setting("{$field["name"]}_enabled") && $this->get_setting("{$field["name"]}_product") == "enter_amount" ? "" : "hidden", + "class" => $this->get_setting("{$field["name"]}_enabled") && $this->get_setting("{$field["name"]}_product") == 'enter_amount' ? 'gform_currency' : 'hidden gform_currency', ); $html .= " " . $this->settings_text($amount_field, false); @@ -1381,16 +1464,13 @@ protected function get_payment_choices($form){ //--------- Stats Page ------------------- public function get_results_page_config() { - $current_form = $this->get_current_form(); - - if(!$this->has_feed($current_form["id"])) - return false; return array( "title" => "Sales", "search_title" => "Filter", "capabilities" => array("gravityforms_view_entries"), "callbacks" => array( + "fields" => array($this, "results_fields"), "data" => array($this, "results_data"), "markup" => array($this, "results_markup"), "filter_ui" => array($this, "results_filter_ui") @@ -1399,6 +1479,17 @@ public function get_results_page_config() { } + public function results_fields($form) { + + if( $this->has_feed( $form['id'] ) ){ + return $form['fields']; + } + else { + return false; + } + + } + public function results_markup($html, $data, $form, $fields){ $html = "
@@ -1685,8 +1776,7 @@ protected function get_sales_summary($form_id){ $tz_offset = $this->get_mysql_tz_offset(); - $summary = $wpdb->get_results( - $wpdb->prepare(" + $sql = $wpdb->prepare(" SELECT lead.date, lead.orders, lead.subscriptions, transaction.revenue FROM ( SELECT date( CONVERT_TZ(date_created, '+00:00', '" . $tz_offset . "') ) as date, @@ -1705,7 +1795,9 @@ protected function get_sales_summary($form_id){ WHERE l.form_id=%d GROUP BY date ) AS transaction on lead.date = transaction.date - ORDER BY date desc", $form_id, $form_id), ARRAY_A); + ORDER BY date desc", $form_id, $form_id); + + $summary = $wpdb->get_results($sql, ARRAY_A); $total_summary = $wpdb->get_results( $wpdb->prepare(" @@ -1743,7 +1835,7 @@ protected function get_sales_summary($form_id){ $result["yesterday"]["subscriptions"] = $day["subscriptions"]; } - $is_within_30_days = strtotime($day["date"]) >= strtotime($local_time . " -30 days") ; + $is_within_30_days = strtotime( $day["date"] ) >= strtotime( "-30 days", $local_time ) ; if($is_within_30_days){ $result["last30"]["revenue"] += floatval($day["revenue"]); $result["last30"]["orders"] += floatval($day["orders"]); @@ -1798,8 +1890,16 @@ protected function get_payment_methods($form_id){ $payment_methods = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT payment_method FROM {$wpdb->prefix}rg_lead WHERE form_id=%d", $form_id)); - return $payment_methods; + return array_filter( $payment_methods, array( $this, 'array_filter_non_blank' ) ); } + + protected function array_filter_non_blank ( $value ){ + if( empty( $value ) || $value == 'null' ){ + return false; + } + return true; + } + //-------- Uninstall --------------------- protected function uninstall(){ global $wpdb; @@ -1808,8 +1908,12 @@ protected function uninstall(){ $sql = $wpdb->prepare( "DELETE FROM {$wpdb->prefix}gf_addon_payment_transaction WHERE lead_id IN (SELECT lead_id FROM {$wpdb->prefix}rg_lead_meta WHERE meta_key='payment_gateway' AND meta_value=%s)", $this->_slug); + $wpdb->query($sql); - $wpdb->query($sql); + $sql = $wpdb->prepare( "DELETE FROM {$wpdb->prefix}gf_addon_payment_callback WHERE addon_slug=%s", $this->_slug); + $wpdb->query($sql); + + delete_option( 'gravityformsaddon_payment_version' ); //clear cron wp_clear_scheduled_hook($this->_slug . "_cron"); @@ -1835,7 +1939,13 @@ public function scripts() { array( "admin_page" => array( "form_settings" ), "tab" => $this->_slug ), array( "admin_page" => array( "entry_view" ) ) ) - ) + ), + array( + 'handle' => 'gform_form_admin', + 'enqueue' => array( + array( 'admin_page' => array( 'entry_edit' ) ), + ), + ), ); return array_merge( parent::scripts(), $scripts ); diff --git a/includes/api.php b/includes/api.php index 7b30465..0dbc96d 100644 --- a/includes/api.php +++ b/includes/api.php @@ -47,6 +47,33 @@ public static function get_form($form_id) { } + /** + * Returns all the form objects + * + * @since 1.8.11.5 + * @access public + * @static + * + * @param bool $active + * @param bool $trash + * + * @return mixed The array of Forms + */ + public static function get_forms( $active = true, $trash = false ) { + + $form_ids = GFFormsModel::get_form_ids( $active, $trash ); + if ( empty( $form_ids ) ) { + return array(); + } + + $forms = array(); + foreach ( $form_ids as $form_id ) { + $forms[] = GFAPI::get_form( $form_id ); + } + + return $forms; + } + /** * Deletes the forms with the given Form IDs * diff --git a/includes/upload.php b/includes/upload.php index 8a41edd..e4ef18d 100644 --- a/includes/upload.php +++ b/includes/upload.php @@ -36,6 +36,10 @@ public static function upload() { $form_unique_id = rgpost("gform_unique_id"); $form = GFFormsModel::get_form_meta($form_id); + if ( empty( $form ) ) { + die(); + } + $target_dir = GFFormsModel::get_upload_path($form_id) . DIRECTORY_SEPARATOR . "tmp" . DIRECTORY_SEPARATOR; wp_mkdir_p($target_dir); @@ -50,6 +54,11 @@ public static function upload() { $file_name = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ''; $field_id = rgpost("field_id"); $field = GFFormsModel::get_field($form, $field_id); + + if ( empty( $field ) ) { + die(); + } + // Clean the fileName for security reasons $file_name = preg_replace('/[^\w\._]+/', '_', $file_name); @@ -154,6 +163,11 @@ public static function upload() { $uploaded_filename = $_FILES["file"]["name"]; + if ( file_exists( $file_path ) ) { + GFFormsModel::set_permissions( $file_path ); + } else { + die( '{"status" : "error", "error" : {"code": 105, "message": "' . __( 'Upload unsuccessful:', 'gravityforms' ) . ' '. $uploaded_filename . '"}}' ); + } $output = array("status" => "ok", "data" => array("temp_filename" => $tmp_file_name , diff --git a/includes/webapi/webapi.php b/includes/webapi/webapi.php index fdd7704..8b7bf27 100644 --- a/includes/webapi/webapi.php +++ b/includes/webapi/webapi.php @@ -1080,7 +1080,7 @@ public function results_cache_exists($form_id) { $key = $this->get_results_cache_key_prefix($form_id); - $key = "%" . like_escape($key) . "%"; + $key = "%" . GFCommon::esc_like( $key ) . "%"; $sql = $wpdb->prepare("SELECT count(option_id) FROM $wpdb->options WHERE option_name LIKE %s", $key); @@ -1099,7 +1099,7 @@ public function delete_cached_results($form_id) { $key = $this->get_results_cache_key_prefix($form_id); - $key = "%" . like_escape($key) . "%"; + $key = "%" . GFCommon::esc_like( $key ) . "%"; $sql = $wpdb->prepare("DELETE FROM $wpdb->options WHERE option_name LIKE %s", $key); diff --git a/js/chosen.jquery.min.js b/js/chosen.jquery.min.js index 1215390..cece231 100644 --- a/js/chosen.jquery.min.js +++ b/js/chosen.jquery.min.js @@ -1,10 +1,2 @@ -// Chosen, a Select Box Enhancer for jQuery and Protoype -// by Patrick Filler for Harvest, http://getharvest.com -// -// Version 0.9.12 -// Full source at https://github.com/harvesthq/chosen -// Copyright (c) 2011 Harvest http://getharvest.com - -// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -// This file is generated by `cake build`, do not edit it by hand. -(function(){var e;e=function(){function e(){this.options_index=0,this.parsed=[]}return e.prototype.add_node=function(e){return e.nodeName.toUpperCase()==="OPTGROUP"?this.add_group(e):this.add_option(e)},e.prototype.add_group=function(e){var t,n,r,i,s,o;t=this.parsed.length,this.parsed.push({array_index:t,group:!0,label:e.label,children:0,disabled:e.disabled}),s=e.childNodes,o=[];for(r=0,i=s.length;r"+e.html+"")},e.prototype.results_update_field=function(){return this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},e.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},e.prototype.results_search=function(e){return this.results_showing?this.winnow_results():this.results_show()},e.prototype.keyup_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale();switch(t){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:e.preventDefault();if(this.results_showing)return this.result_select(e);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},e.prototype.generate_field_id=function(){var e;return e=this.generate_random_id(),this.form_field.id=e,e},e.prototype.generate_random_char=function(){var e,t,n;return e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",n=Math.floor(Math.random()*e.length),t=e.substring(n,n+1)},e}(),t.AbstractChosen=e}.call(this),function(){var e,t,n,r,i={}.hasOwnProperty,s=function(e,t){function r(){this.constructor=e}for(var n in t)i.call(t,n)&&(e[n]=t[n]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e};r=this,e=jQuery,e.fn.extend({chosen:function(n){var r,i,s;return s=navigator.userAgent.toLowerCase(),i=/(msie) ([\w.]+)/.exec(s)||[],r={name:i[1]||"",version:i[2]||"0"},r.name==="msie"&&(r.version==="6.0"||r.version==="7.0"&&document.documentMode===7)?this:this.each(function(r){var i;i=e(this);if(!i.hasClass("chzn-done"))return i.data("chosen",new t(this,n))})}}),t=function(t){function i(){return i.__super__.constructor.apply(this,arguments)}return s(i,t),i.prototype.setup=function(){return this.form_field_jq=e(this.form_field),this.current_value=this.form_field_jq.val(),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},i.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},i.prototype.set_up_html=function(){var t,r,i,s,o,u;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/[^\w]/g,"_"):this.generate_field_id(),this.container_id+="_chzn",t=["chzn-container"],t.push("chzn-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&t.push(this.form_field.className),this.is_rtl&&t.push("chzn-rtl"),this.f_width=this.form_field_jq.outerWidth(),i={id:this.container_id,"class":t.join(" "),style:"width: "+this.f_width+"px;",title:this.form_field.title},r=e("
",i),this.is_multiple?r.html('
    '):r.html(''+this.default_text+'
      '),this.form_field_jq.hide().after(r),this.container=e("#"+this.container_id),this.dropdown=this.container.find("div.chzn-drop").first(),s=this.container.height(),o=this.f_width-n(this.dropdown),this.dropdown.css({width:o+"px",top:s+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),u=o-n(this.search_container)-n(this.search_field),this.search_field.css({width:u+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},i.prototype.register_observers=function(){var e=this;return this.container.mousedown(function(t){return e.container_mousedown(t)}),this.container.mouseup(function(t){return e.container_mouseup(t)}),this.container.mouseenter(function(t){return e.mouse_enter(t)}),this.container.mouseleave(function(t){return e.mouse_leave(t)}),this.search_results.mouseup(function(t){return e.search_results_mouseup(t)}),this.search_results.mouseover(function(t){return e.search_results_mouseover(t)}),this.search_results.mouseout(function(t){return e.search_results_mouseout(t)}),this.form_field_jq.bind("liszt:updated",function(t){return e.results_update_field(t)}),this.form_field_jq.bind("liszt:activate",function(t){return e.activate_field(t)}),this.form_field_jq.bind("liszt:open",function(t){return e.container_mousedown(t)}),this.search_field.blur(function(t){return e.input_blur(t)}),this.search_field.keyup(function(t){return e.keyup_checker(t)}),this.search_field.keydown(function(t){return e.keydown_checker(t)}),this.search_field.focus(function(t){return e.input_focus(t)}),this.is_multiple?this.search_choices.click(function(t){return e.choices_click(t)}):this.container.click(function(e){return e.preventDefault()})},i.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},i.prototype.container_mousedown=function(t){var n;if(!this.is_disabled)return n=t!=null?e(t.target).hasClass("search-choice-close"):!1,t&&t.type==="mousedown"&&!this.results_showing&&t.preventDefault(),!this.pending_destroy_click&&!n?(this.active_field?!this.is_multiple&&t&&(e(t.target)[0]===this.selected_item[0]||e(t.target).parents("a.chzn-single").length)&&(t.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),e(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},i.prototype.container_mouseup=function(e){if(e.target.nodeName==="ABBR"&&!this.is_disabled)return this.results_reset(e)},i.prototype.blur_test=function(e){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},i.prototype.close_field=function(){return e(document).unbind("click",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},i.prototype.activate_field=function(){return this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},i.prototype.test_active_click=function(t){return e(t.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},i.prototype.results_build=function(){var e,t,n,i,s;this.parsing=!0,this.results_data=r.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.addClass("chzn-default").find("span").text(this.default_text),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?this.container.addClass("chzn-container-single-nosearch"):this.container.removeClass("chzn-container-single-nosearch")),e="",s=this.results_data;for(n=0,i=s.length;n'+e("
      ").text(t.label).html()+"")},i.prototype.result_do_highlight=function(e){var t,n,r,i,s;if(e.length){this.result_clear_highlight(),this.result_highlight=e,this.result_highlight.addClass("highlighted"),r=parseInt(this.search_results.css("maxHeight"),10),s=this.search_results.scrollTop(),i=r+s,n=this.result_highlight.position().top+this.search_results.scrollTop(),t=n+this.result_highlight.outerHeight();if(t>=i)return this.search_results.scrollTop(t-r>0?t-r:0);if(n'+t.html+"":r='
    • '+t.html+'
    • ',this.search_container.before(r),i=e("#"+n).find("a").first(),i.click(function(e){return s.choice_destroy_link_click(e)}))},i.prototype.choice_destroy_link_click=function(t){return t.preventDefault(),this.is_disabled?t.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(e(t.target)))},i.prototype.choice_destroy=function(e){if(this.result_deselect(e.attr("rel")))return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),e.parents("li").first().remove(),this.search_field_scale()},i.prototype.results_reset=function(){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.is_multiple||this.selected_item.addClass("chzn-default"),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},i.prototype.results_reset_cleanup=function(){return this.current_value=this.form_field_jq.val(),this.selected_item.find("abbr").remove()},i.prototype.result_select=function(e){var t,n,r,i;if(this.result_highlight)return t=this.result_highlight,n=t.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(t):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=t,this.selected_item.removeClass("chzn-default")),t.addClass("result-selected"),i=n.substr(n.lastIndexOf("_")+1),r=this.results_data[i],r.selected=!0,this.form_field.options[r.options_index].selected=!0,this.is_multiple?this.choice_build(r):(this.selected_item.find("span").first().text(r.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!e.metaKey&&!e.ctrlKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field_jq.val()!==this.current_value)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[r.options_index].value}),this.current_value=this.form_field_jq.val(),this.search_field_scale()},i.prototype.result_activate=function(e){return e.addClass("active-result")},i.prototype.result_deactivate=function(e){return e.removeClass("active-result")},i.prototype.result_deselect=function(t){var n,r;return r=this.results_data[t],this.form_field.options[r.options_index].disabled?!1:(r.selected=!1,this.form_field.options[r.options_index].selected=!1,n=e("#"+this.container_id+"_o_"+t),n.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[r.options_index].value}),this.search_field_scale(),!0)},i.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('')},i.prototype.winnow_results=function(){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y;this.no_results_clear(),f=0,l=this.search_field.val()===this.default_text?"":e("
      ").text(e.trim(this.search_field.val())).html(),o=this.search_contains?"":"^",s=new RegExp(o+l.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),p=new RegExp(l.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),y=this.results_data;for(d=0,m=y.length;d=0||n.html.indexOf("[")===0)){i=n.html.replace(/\[|\]/g,"").split(" ");if(i.length)for(v=0,g=i.length;v"+n.html.substr(c+l.length),h=h.substr(0,c)+""+h.substr(c)):h=n.html,u.html(h),this.result_activate(u),n.group_array_index!=null&&e("#"+this.results_data[n.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&a===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(u))}}return f<1&&l.length?this.no_results(l):this.winnow_results_set_highlight()},i.prototype.winnow_results_clear=function(){var t,n,r,i,s;this.search_field.val(""),n=this.search_results.find("li"),s=[];for(r=0,i=n.length;r'+this.results_none_found+' ""'),n.find("span").first().html(t),this.search_results.append(n)},i.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},i.prototype.keydown_arrow=function(){var t,n;this.result_highlight?this.results_showing&&(n=this.result_highlight.nextAll("li.active-result").first(),n&&this.result_do_highlight(n)):(t=this.search_results.find("li.active-result").first(),t&&this.result_do_highlight(e(t)));if(!this.results_showing)return this.results_show()},i.prototype.keyup_arrow=function(){var e;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return e=this.result_highlight.prevAll("li.active-result"),e.length?this.result_do_highlight(e.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},i.prototype.keydown_backstroke=function(){var e;if(this.pending_backstroke)return this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke();e=this.search_container.siblings("li.search-choice").last();if(e.length&&!e.hasClass("search-choice-disabled"))return this.pending_backstroke=e,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")},i.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},i.prototype.keydown_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale(),t!==8&&this.pending_backstroke&&this.clear_backstroke();switch(t){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(e),this.mouse_on_container=!1;break;case 13:e.preventDefault();break;case 38:e.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},i.prototype.search_field_scale=function(){var t,n,r,i,s,o,u,a,f;if(this.is_multiple){r=0,u=0,s="position:absolute; left: -1000px; top: -1000px; display:none;",o=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(a=0,f=o.length;a",{style:s}),n.text(this.search_field.val()),e("body").append(n),u=n.width()+25,n.remove(),u>this.f_width-10&&(u=this.f_width-10),this.search_field.css({width:u+"px"}),t=this.container.height(),this.dropdown.css({top:t+"px"})}},i.prototype.generate_random_id=function(){var t;t="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(e("#"+t).length>0)t+=this.generate_random_char();return t},i}(AbstractChosen),r.Chosen=t,n=function(e){var t;return t=e.outerWidth()-e.width()},r.get_side_border_padding=n}.call(this); \ No newline at end of file +/* Chosen v1.1.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ +!function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b;return a.search_match||a.group_match?a.active_options>0?(b=document.createElement("li"),b.className="group-result",b.innerHTML=a.search_text,this.outerHTML(b)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+""+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+""+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d?d.destroy():d||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
      ",c),this.is_multiple?this.container.html('
        '):this.container.html(''+this.default_text+'
          '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
        • ",{"class":"search-choice"}).html(""+b.html+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("
          ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
        • '+this.results_none_found+' ""
        • '),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
          ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this); \ No newline at end of file diff --git a/js/conditional_logic.js b/js/conditional_logic.js index aa15d50..521e3c0 100644 --- a/js/conditional_logic.js +++ b/js/conditional_logic.js @@ -76,13 +76,13 @@ function gf_is_match(formId, rule){ for(var i=0; i< inputs.length; i++){ fieldValue = gf_get_value(jQuery(inputs[i]).val()); - + //find specific checkbox/radio item. Skip if this is not the specific item and the operator is not one that targets a range of values (i.e. greater than and less than) var isRangeOperator = jQuery.inArray(rule["operator"], ["<", ">", "contains", "starts_with", "ends_with"]) >= 0; if(fieldValue != rule["value"] && !isRangeOperator) { continue; } - + //blank value if item isn't checked if(!jQuery(inputs[i]).is(":checked")) { fieldValue = ""; @@ -94,7 +94,7 @@ function gf_is_match(formId, rule){ if(gf_matches_operation(fieldValue, rule["value"], rule["operator"])) isMatch = true; - } + } } else{ //handling all other fields (non-checkboxes) @@ -238,44 +238,43 @@ function gf_do_next_button_action(formId, action, fieldId, isInit){ } function gf_do_action(action, targetId, useAnimation, defaultValues, isInit, callback){ - if(action == "show"){ - if(useAnimation && !isInit){ - if(jQuery(targetId).length > 0) - jQuery(targetId).slideDown(callback); - else if(callback) - callback(); - - } - else{ - jQuery(targetId).show(); - if(callback) - callback(); - - } - } - else{ - //if field is not already hidden, reset its values to the default - var child = jQuery(targetId).children().first(); + var $target = jQuery(targetId); + if(action == "show"){ + if(useAnimation && !isInit){ + if($target.length > 0){ + $target.slideDown(callback); + } else if(callback){ + callback(); + } + } + else{ + $target.show(); + if(callback){ + callback(); + } + } + } + else{ + //if field is not already hidden, reset its values to the default + var child = $target.children().first(); if (child.length > 0){ - if(!gformIsHidden(child)){ - gf_reset_to_default(targetId, defaultValues); - } + if(!gformIsHidden(child)){ + gf_reset_to_default(targetId, defaultValues); + } } - if(useAnimation && !isInit){ - if(jQuery(targetId).length > 0) { - jQuery(targetId).slideUp(callback); + if(useAnimation && !isInit){ + if($target.length > 0 && $target.is(":visible")) { + $target.slideUp(callback); + } else if(callback) { + callback(); } - else if(callback) { - callback(); - } - } - else{ - jQuery(targetId).hide(); - if(callback){ - callback(); - } - } + } else{ + $target.hide(); + if(callback){ + callback(); + } + } } } @@ -319,7 +318,7 @@ function gf_reset_to_default(targetId, defaultValue){ var element = jQuery(this); if(element.is('select:not([multiple])')){ - val = element.find('option').eq(0).val(); + val = element.find('option' ).not( ':disabled' ).eq(0).val(); } //get name of previous input field to see if it is the radio button which goes with the "Other" text box diff --git a/js/form_admin.js b/js/form_admin.js index a4d050d..e7ff428 100644 --- a/js/form_admin.js +++ b/js/form_admin.js @@ -15,8 +15,24 @@ jQuery(document).ready(function($){ if(typeof form != 'undefined') window.gfMergeTags = new gfMergeTagsObj(form); + $(document).ready(function(){ + $(".gform_currency").bind("change", function(){ + FormatCurrency(this); + }).each(function(){ + FormatCurrency(this); + }); + }); + }); +function FormatCurrency(element){ + if(gf_vars.gf_currency_config){ + var currency = new Currency(gf_vars.gf_currency_config); + var price = currency.toMoney(jQuery(element).val()); + jQuery(element).val(price); + } +} + function ToggleConditionalLogic(isInit, objectType){ var speed = isInit ? "" : "slow"; if(jQuery('#' + objectType + '_conditional_logic').is(":checked")){ @@ -39,36 +55,35 @@ function ToggleConditionalLogic(isInit, objectType){ } function GetConditionalObject(objectType){ - - var object = false; + var obj = false; switch(objectType){ case "page": case "field": - object = GetSelectedField(); + obj = GetSelectedField(); break; case "next_button" : var field = GetSelectedField(); - object = field["nextButton"]; + obj = field["nextButton"]; break; case "confirmation": - object = confirmation; + obj = confirmation; break; case "notification": - object = current_notification; + obj = current_notification; break; default: - object = typeof form != 'undefined' ? form.button : false; + obj = typeof form != 'undefined' ? form.button : false; break; } - object = gform.applyFilters( 'gform_conditional_object', object, objectType ) + obj = gform.applyFilters( 'gform_conditional_object', obj, objectType ) - return object; + return obj; } function CreateConditionalLogic(objectType, obj){ @@ -106,6 +121,7 @@ function CreateConditionalLogic(objectType, obj){ var i, rule; for(i=0; i < obj.conditionalLogic.rules.length; i++){ rule = obj.conditionalLogic.rules[i]; + str += "
          "; str += GetRuleFields(objectType, i, rule.fieldId); str += GetRuleOperators(objectType, i, rule.fieldId, rule.operator); @@ -1334,6 +1350,16 @@ function FeedConditionConditionalDescription( description, descPieces, objectTyp return descPiecesArr.join(' '); } +function SimpleConditionObject( object, objectType ) { + + if( objectType.indexOf('simple_condition') < 0 ) + return object; + + var objectName = objectType.substring(17) + "_object"; + + return window[objectName]; +} + function makeArray( object ) { var array = []; for( i in object ) { diff --git a/js/gravityforms.js b/js/gravityforms.js index 9ac85ca..5425b4f 100644 --- a/js/gravityforms.js +++ b/js/gravityforms.js @@ -740,7 +740,7 @@ function gformInitChosenFields(fieldList, noResultsText){ var element = jQuery(this); //only initialize once - if( element.is(":visible") && element.siblings(".chzn-container").length == 0 ){ + if( element.is(":visible") && element.siblings(".chosen-container").length == 0 ){ var options = gform.applyFilters( 'gform_chosen_options', { no_results_text: noResultsText }, element ); element.chosen( options ); } @@ -797,7 +797,8 @@ var GFCalc = function(formId, formulaFields){ field = jQuery('#field_' + formId + '_' + formulaField.field_id), formulaInput = jQuery('#input_' + formId + '_' + formulaField.field_id), previous_val = formulaInput.val(), - expr = calcObj.replaceFieldTags( formId, formulaField.formula, formulaField ).replace(/(\r\n|\n|\r)/gm,""), + formula = gform.applyFilters( 'gform_calculation_formula', formulaField.formula, formulaField, formId, calcObj ), + expr = calcObj.replaceFieldTags( formId, formula, formulaField ).replace(/(\r\n|\n|\r)/gm,""), result = ''; if(calcObj.exprPatt.test(expr)) { @@ -1381,11 +1382,11 @@ function gformInitSpinner( formId, spinnerUrl ) { if( typeof spinnerUrl == 'undefined' || ! spinnerUrl ) spinnerUrl = gform.applyFilters( "gform_spinner_url", gf_global.spinnerUrl, formId ); - jQuery( '#gform_' + formId ).submit( function(){ - if( jQuery( '#gform_ajax_spinner_' . formId ).length == 0 ) { - jQuery( '#gform_submit_button_' + formId + ', #gform_wrapper_' + formId + ' .gform_next_button, #gform_wrapper_' + formId + ' .gform_image_button') - .after( '' ); - } - } ); + jQuery('#gform_' + formId).submit(function () { + if (jQuery('#gform_ajax_spinner_' + formId).length == 0) { + jQuery('#gform_submit_button_' + formId + ', #gform_wrapper_' + formId + ' .gform_next_button') + .after(''); + } + }); } diff --git a/languages/gravityforms-fi.mo b/languages/gravityforms-fi.mo index 79816d0899639ababfa5d2ebe6b770506ba00441..9086576eeb6c52ee046bc26731839c60d2a3b1e6 100644 GIT binary patch literal 163843 zcmZ_X1#lJF8m{4;;O;IHAP^jayGtN=U~qRG+}+)V;O_43gS)%C>)+xJ!>G8zFs~8nuV>JA3 z`H@$7Jkd$}VI0hYF|jzt!m4I7v%5JGV^cm8{c#N{{sp9a&s}6lo)?%AKVW!Fx!U82 zg6Xg*=0vschQ)Cv7REbR2>sT0Jb_prGvEYFfV)urUo@X!T+-hx9doV6lZ13COpJw5 z{no;0*bIkaXUvS>FaoAu=kY|sY^ZbrEQ=*9JgOw(i>6hxZUzkS^g#S z2KrKd&(aT3^LlRS1nb>6lcC0u4$okAOo?GPcs!FZ088OcoQPpIdOS;UGPcLUn>?Q0 zxE3|O+2zK^Q+413@gRQpa_+_weO0W_dpDT zBT)T}LG6#3sQ%|;GF*w;|Hse|U!(4G%VAda;pUqd zHI9^)PG<(1c~RpliUC*>Gh;frSqWrDU4e8s;K_!qvq8SHQu49@r^{S=QLEmbF6%o<*!4{ zXA5S-M_3vY?RM+m5Y>Nc)cx&*dQbL7^*0eUp2etoJ1`mU$FO)8wND?R#`Os`uWzXP z>$}IjKck}BCr9m{G^qLIvUE{PS4P#VV>Yq;HmLD+L-o_&$_JaHQThP`Bh>To8a1Bp7z@Mhb@Ppn8b<(Xzh^+z%WW1$&95|SeX5}P zYmCZogR0-n?1vivFjT)|(K`=Ry?LneWvKhS7IlAiqxwIGN$?ixzI-)*qS}Z3$IUw` zY8w^V^DFYqxQ#qa|go;-K6|XgF9-UF^ zHVDJwOss+Puq=MXU@UpaaYl``gcsvd88qQJrsK*n8*Rd4(A0q~~ z#-g|m*Wx?WcorUa^IC=BNN+WFV|daBQ1|UPYMke-{EB%CHU9^w_wIWvh*3}QtYKNy zzMO?xhxO(`)cw1H+Mkb5{eQ-&_yaY*C?}n9&17a8GYe{bc`z~-L9Kr%#U$TxptLM`?wxzANR*7I0enf`M2N(n2SlV;m zl}E)Y4*qT>I+I2iqcYo8LMkHG)TF~-arqfh?Q>c>2=%;FMm=Y> zQE|GW)@Kx^!f99;cVRY+an+5#7zU88iHb7-6@QeaXQMtpmZHXcz|vPx`}IBQ{(nWS zYq)DJKN{+O#6gw+fm;9csCos=5~%r>L)EKh`3+F}zXfVMZBgUvkGgLoEjO z_gMK0^P3s@x@(^Z6)zQP{JBu$EMVy%E3bgMuMJWCb~6W9`6zQXYW(X^ocM#S7 ztfe2L_R%{`gkf*EaU@6GuRv6JDNKmfQT5uR#yisTXQ4mo&8X+(I;x*9RvzP~Yo8Xi z-bGPyLM*>6CMP`<6?YLPz^$nJat7<;73_j}Zn^izYSj4Fqvp3CRsS?D!ONE4@3y-? zqp%hE)3G&%yW{px2P{i^2sXkqI2p6wb^G-g>Uq3^TF)n#6W?JoOn1+{@5f_l(jQUr z3f<>BE{?!C%Ey*C`GNcS&GXQGUI*X|@|$8`^m*jIKlI0@qz~g5%=DPOhdWU5{h#pN z3;)8=xCYx{fv4{K%L)u4{Rzuqk!QR!a10j1d#LuQpS$0;G{t13mthn!d+0f;evH>{d z`;pr$j#{URsByMN_1_*f-tMUO{ZRLF9_oJVvGfg0PWmfq9Esk#=P4`d{^Y=DSP(V7 zVAS{(UGLz8HpCaSp2f8PvLbF@4^-aYaJihZts3RK0Yl{sVC)7C`O4tEhhO zqxySdzDJGQ^WMFOVq+YVsVtovRX+&hVpUZ9mZ<(ZV@B+aad8={{%%yi$57+EfN}Az zr9Yz9HOvPWFP51Ul^=jHF{fDyHO}g&_jpUx{Tzte{}WK-+Jt&9??v6`YnJ|C=@=i~ zK1z?ezooGbmdC$vIch&7{^Z){Ma{D+YG2eb8>7b83N_DOmOlhFj?ow!r&#%N)cS9< z^fuIb>_^S#3ToVMtvt$SH@8??qey`{i=rXusy2&P)vaHQRCQ-TGta8fVWZgBYbrxL#=CeY>YuT0#{;l%=OJZ zSFBHC)U!lg^^1EA~cBpxDLGS%V&3g!{-WbcDh+5B?sP$Z6>2;{~TT%CCH|l-y z4=Ua*M{LOOA?D02Q}5Y8=&3^R0`D(-alwFVwnrNA)ut2jJh9 zju*zo_d|_8Giv+=QT>;}_*e_oUk6NxLs0$9MvZ4Fs{I<&cz2`vKY>Z`BI>z&i;5FI ztV<`xcBHdlA)Jl6k2lSG=3~_SUZDDWkJ?Y)Q1g!-&b5n+8gC+0e_2uON}}qON3{>J z{8|`>bR$bQL)B}Cx__Nf>o)*3p9!e;(^2i_p~kz&(#tKq8nxaVQ1N!7+8;o*KWSb- z)w^!#N0xqxs{a|)-Y2|EM?kfYX(m9mPmUT#I?KwvmXA*lP<5EZAj zm3KwWyEkeaqfzlgt$aFaf6PU#^E%Xf_7JMx4b=MGMeU1M=6|U1M~&e2Q5@7bGotF} zK#i}c<(Edi*DIp#YeUQLj;hxmwO@y#<}(qszviMo7dDzFup#LOsPUDG=;j@ans+rz zH?VXoOLwt!Kh(HKqIVyd(^2sjpvJQlwJxhsardCs_ZX`E1(s3>Q2P$rWoFJ= zcQk4|vryw+jJnS&P~+H!T9+fJ_UBRKy@`51+(pg*J*waEQQSC_qrPWkK-CXMty@J@ z{XbFrxdm$9^+k;<6gAITsQSxM<6DOs$97b_gQ)QzMUCqks@?<3e~Eg&exT+bJ*q2D zjOr&9Dt-nto0aFa@?xm|%A)Q|HOsG!ns;MMcg3Wn`=Zu=25SAbm{RTHLt2xUI(?mTA=1R0Cj(dTlpAlOnMrs z-GA5!!$o)fwm_|CJ4<&%_1_0oe*`M-1l0VdqVCHA)O?np+HbP-ZdAP!=4C6thl=|g zwXUB~@0Z9id_3hbIci_EL5+VfYThGI?f%AOI0v<_cA@sgX;i&C<}=iKzDJG!E9(8= z8`F(994bE!>bXgR>OUt2;viIin^5!k2Q}UkmVX=7?{n01{v9>mSh3tX#Ye46GSqXG z0d@cLq2iWC-LDYTbI}I1z5`MFcm%5bG}O8-G1sE^IYq@gf~oN$YX09)?Zd_P@l3#Y zsC8I^dhS+XMLdA&H*Op^j`XPV;+P+6q57YUnQV7ptt$TOWdi6)e8)Eq*EIq->Ls9XkTY3TNJ}yPYU4a_MR_uWXup1VN z=l0QN%t88;8797u_xHwmFe~}3F+0w*{4=QWg-PJ!{hk~JbCJ%9s@EKg;tXtsH&ORL zD50BoT~xXWDozi}AAq_K!!14547L23sQWq}wcpmE=C{*4in>3Sto$WvT|T4Y`XqAq zKLTp~W1;qELR7tUsP)cl4A9D7moJBzA+2enV1qUwJ^{rnRqv5&_OlcVYtMzsqTX3Kcg5)n6UdzU+pY=LppN#-jRJgj%mnsQLYaigOtC-nxL= z=TA`2$46AWfkiOsAFf?pRC#yQcqd^X?nFK3uTbx~WPYwZE2bx11Cz5+ z2BG%%{FLtfu?02Wlc?w6H7ahcR6gFH_Xncx%QDn{IFDMtYpDD17`3n7pw{^tYClBq zck3Dp^`80zwXQiWzceaNHB`Gs*bduS`X=i6dy0zx*7Coj;zvyF@?)d!OEOfPK-7LK zh?-|P)VLd>;%9jxubZg-^9VKmkEnQ2)3|x1K<%e2sJJ=N+b?Pz z%b~`#1=a32s{S3+etTrTNA>R;;QGsi>c1d*_q(M-P;u&@`s;v-(*sp+80!1mB-D5} zn#ZjC4r(91MBVSmY27}_Xck7Ta~0Hh>S8t=jvCJn)cg*h*7-bYpWQ~y>tEEkK3m$8 z&V4R~N0moL#fgc!e~D1{B^9b&dP`?B^P=Wg1l7I*dcPl|`frDtXHV398jpHU%|(rC zo#h`ueLh`4^?wD`?k;LQKUq3zdbf@#QRB&ins07Yf2B}ytDyR8ii+38(tT0m9gB)T z6Sdy!QT0xv;$1=Y`xtZMcU0UQ8C-s8)cvf3>bE88`&1XyxW=IBhob5&wfs$}aqU8_ z>q*PMfZB&QEd2)6?lWq<;WE0oaZuw-VrhTWx@Sbi%Vzm`EnO5f&mhz|>!BaELbV%( z+D{YEyB?^1*Q4gK$MO%O>fN;RC#e1L0X3eVX2eWxez8#PQ=sCdL-n5v)o(FW`yeZ? zV)^wg-4qqKBdT66)cl5^;*3VcnTi_sY|Gz>ex&zW`CaodY8_u<0DeQwCsk(GJ~L{Z zCCtjGe(Rye(ZcdOpgzC)qTWw~Q1wDBJqOj#I@CVegW3nDQ0s9Q^?W=U!TFBC(qUrp3HbwaJ3T7vlpQj-zt>n&j`srkF5~kN3|@`eHuPudp?y%j@GAh@p5w_44_6+Tuf8gdzETynmnL z3+jILDd3|&Lh~%ezi~!EAMc-&XDQ?yhc(E5Z3Y!~^PY#*$^VW;v1$?by1oM#p z6<1*PqCWgCm-jn1CtanukN3}0x8oYp;Y#>;LU9vjz~GXuUN`JW`ZhMhDy4k9e_wqY z4kKNmwA)XYu&(N%_Eo_kw~vES>mGu-A1y6^5USoNbDHHZLA~GCU>4kfdT#Ec;=DA& zlyUbX5mqI?6KdZaK|P0!%ewb(8`N_!z?_JBt{0%<9=G&G)c*bt)jndddvC--J;w=9 z`y?r9-(>0AHA2N}iR!PDDAassqW1N2%io5If6U5Hqx!#TK0>{}UZeK) z2h`_6)N*cplcL7skID~3y+?|o`l*WA2aPc;&P1*2LDYOdn4a=3P88HQ6QbIuvHYB< z=erncJQYymu8MkJ)x<8?5R2etEQ1Lv_;@a1BdmaVE4pi-U^ z-4jc{LXGz$s@+f2x`(gq)+-JwodWgV%#8Y8Pz*J{>XzReGm-9vIdK{4y>=V(W1K3^ zim2y$6zYDQM2+h@YFzhG{XIpE=cD-_s{gPdZoec%jXMi!f965eFNTU+26bPnn~lxC zQ2q2m)gOSm55rOM{x)Z#)_D=C{&H0RYfNf*w{JBv57qR>@sQX#f%A1=V&^vxq+ySUKLoI&-D&7=Sym?pzm!sDGITprD z)!h5GE$Z{>2&TXcf4b+tJnH9+&Zzx25%s=aiB&LMb@w?^1O1ebCGjMxpExyKKh-b| z=};_bZTM0kyAd z;${p*&9hv6_w#Khb3W?%Ka1)oOau3GdRFX6dMRrEBx&eOi(1E=sQA6GEpEZ4n7WZ$ zhf%0;o<@D|_HXRgqW~5p-34_YHlV&we8BNosfqJ0jwRi(se6C;wLh1k_WOR+b8!Oo{GUbbx0`qo?_(w0*2eAU z$Zg#^H%8T)gWl)f(#uhC)>?X}rT3wp|5K>b?CAHNLRzT-;=4D%5)<9qK(& z&@73HSKiW9QTw8f<+ntQt37HwUCaSiJ_Z$U5^8;BqQ0OlrBd?>hk6gkM7_6DS$HxKA4F*yLlHx&9^*i-1Sl8=w|6YsCk5i!&|C1xPK4VC{8HP1xdd_03O1uEWR?1GWH`*`|c zKh*o8ld3ySIrhp%Y;#SoAwL&j9 z?`5cXYf$mFpw{OfOP|MTq;I0?W$*3U06!!lSOd*CwE`!rP_ zw=UDoQ>JfU_xYI1Y>oQ+8gsD#-bSrw(td88Dq#-N!%)x7PSoe@zo`9}p}#9{iTYfg zjT!MQrokUr8&eN(@Am=dPkJq?zl)d}V-NK4e(vW%?T?zM{nHM6<51LlJOQ`vMN5xGs%so%(QTseU>OE8n^?jf?lEh^3r z)OaHdcSc9O2jZcg*A$k{hT0c}Q2hm=_EiY#IjoJ^R}C%Q%+hTv-2v5aH}u89sD6f_ z_Wj?MKMysYg{bcbD^UHuM7ZM1u&w(0We#YaC0#}>6fG3dW0S0jDs3~O7y~iIZHg=y%%$!AL**7``!iBehiMq`Kb3r-~_jhO;F=+W9eSl zk@O(c{rZSnU*C!DendmfD;etk2B6k4ljRq+{9v;(YCl)EbS*4Sx`Cw^qT(+{#odHA zaS!S_o%Of-{o)QRLAu=}AJ0PEfOD}%sQW(t1@#`TKiS2*irOa+%onI}yhrbIV)@~x z*mI4#zwuDxNsDTq9W}1}W=Yg@S`oF6>Y(mRTh#M22(=!gQE}#?)_(<#!o8?|%1w3S zsE_nM=Yeu=6df2Mms7sITokJ)euY8=;4{l7xZ_oJo%GsDet<kfJk7+)xEV8J#M$mWksCF?3aIsKg?i3OQSOwcn1azYo>Vaq|{x{%=wB!p(F0B^s)qRG1Ufp+1l6qvp{VBVj94yv~*$ zX6Xs2_sBx@!?mb=bQabA7OKC8sBykTjqfw6AD{Vd9mApO$2F6n#+4G)KCR_vwRCRO zelLuQSIw-4iqqWE?NH-;Qd30#*M!YTVaR>+lHG-y6&S zf_mPye%R$ccTYfs!I0I4r7ePH=5KiEAGhHU2+P{iMVE7>H`$7B$|^sCEO; z`#lv^e=TZWTg}6$aa}U+qT;_m)&FSuKT!KI(o(nXsmwss^IF&pLA`&QqsGw&wQfC7 z^PGT{aSE2jr)G|2?&pMlSdIMacmo5M`*{C%grcwT@$?~m8?RyAmG0-nJgeN#1BK#Nq2RBjc^bXa3gmrFQ(NO&+HdC1y&75W-)Hq99x*}?PHBiq% zeN_Cm<^WW`p{UP^6{ztaMm;}QE&T@7&Ud|g55z}(u4O>2TRqf1ZjD-(QKlTi<1FWuK=#WQmB3S5w(AOHoEt2cvRfTsPcrUeVq#R zp3jagv6Q(MyOK`4$;ZS8zT~KWa--svK+Q7*wf>D! z_iYer+|yCx*=U|X-G>KQAHU$ASaYkJ-&*uO_o#UuMvdbnYTTF5d*4v~KDP8H)cy0> z=GrGmm1jb&PeIhUgDk%qDsEF$+;*t@)CD!(;i&yK7Zqotr4L{*=_{!H>c8F1rwD4^ z)lmDOjiq~{)^`G`p9SV}RDbKt1E_v4TlzJszV8mV?vYUImJDDI)_N88B)bnu$wXbeqZhU~c&q;T=`e^?Cse&y|G0MPQR6LOmPC!S0&1MqQ0v$b)xI6- zz6?jL^Fq|TSEI&r(9-u&?Y^SkTM_oT{T+lR4;79C&)epM&#YxnCI*)n|ucOxUDXzhPQ9r-UKjiNBF6>D96n4O(hu!_yfFYz$ zU@!DL;^SF{Gg0eU>Zpq!g5LXqdB|^v<#37l9&3;;dd&U#<8*9D`X$cBipSma_zJb3 z+n#XWH%8)c(id?Q);sC`eCnB*=ai49Klwwk8%8+o-b?+k6zStQ5M!V5@pQsa)O$A4 zS@-u;8lc9t6>DLvbMDVM+h7IK8?hpWIq%j#1U1i2I1>A##uw#+`~CDJ)N`>9wf|0{ z_QeC#`zqQ+XExM6t&X~n4b8Tw`_cn--zJ&!QP2Ha)aSxI^DU|$&n35y5}=-=45*m+82vZpDU}dEN(#UuOF!QXY$L=qNwMj394O7OLsu+r>>}Z^h2%72-I^r z+45&$7}85n^I3s<4{Sq?=LBj#53Kwh>Ur?F;_AgieJ@IjnXnM*`DlY$x4%)JOLNRM zsQ7zO<2Z+!=T%GJM#XuA88Plvw@yXPrl|4}sONMGs{JL@d~cxodx(0kd_c`3&Na7Q z8Bps{0X5DVsP|Go)Oco~)^R@SJ-ZzB9@v43dlR*PUZU3JGwS|ExbD_BIVwMcnGXX< zmqEqvfEs6aRQv&`_!F@tZo~}u6}5h8Zn*hnLyapB>b+J3HLq%x-xd|G3r@$OsBxya z>H5uxx=-0r_qhzJ-|DFO_dvxBMen>(^Vosf@5fN>9-{WqJIsxqTW($RpzdpJRJ(Sl zebNWD-zT8rFGsE89@OX0Y1BOKTKWsB|0uVeNm1=Gq3&lfR6h++`=Apl&OG$P4XAlt zK<$r@mX3GF)ys{#|7EZ$hG2VKirNo}?z;U}1huc4pzd2MvjeKX?x_1Q5*2SEYMo}H zA8s+PpxS>y-A~Uww;oYZ&v9z>!yweUwnX*Y71gdcs-HoYKgyhddhVxK`ApRPUTEnx zR=x!_zMZIehfw$Nq@}N;`nzZ8C#d?bQT={F-A|wUE*%q9KcSf%HEw@P2b#H2?Fypq zLpjtwYmMrEm>G(?uM1H7 za5(<`(ES{i^pShtSH!;LcSo(uC)9j@nBgD0^^A_nPlQ_U6sYw{gKC!*HJ{v;E{R&7 za_EayP|tfcRJ(epI4w~7p)G2idZ70GaMbfL4HbVGD&AU4Z?^JXs5mE4_x&8|xwwfM z?;A^hMm=9qp15^Rh3dB`s(yJ?c?0zBYt-k=NYuEOTloe{A2%F?=nwX`AyXKz(;17*DkIf zYJRz}Empw7xD$0Bznea9Tsk~z98pmBGY)FMB(`)G)H>us?Y9D`@mE5%Yldpq4mIvB zmfsiEZm8vtM%4>Nt=ml0e3zk~haIT)hf(#;pw{~`D$ZRie{A`0EdQ(Jd)~Tsk<6H= zcnK`+hl&?q`GKgo`7B)o)o&TIlI2%Nty=@jZ;G0C8?&?78x?Ob>b{M%{HdsZ=c3{- zN9~7osQUX*@sC*gBbd-h8h7OPu3aotej?O({ZVn#q1G*nl@~$94Mw%EX8Cnc@1N$VakR4Xj;Q_6 z0~LRum5;IfP)pB7#a)c5w-(j^4pcw?pyD1ujpq!i-d)sqUzl%E?LL~{QT_XVaP_00 z;>Abxmkjlu3qUtz0;`g6%Q@n=abtX2~qKLq2d-s z?c?(3k1fy-$Dr0>HLBhw)cWp6wLgv;#|2dXw^8-(qsH|XHJ@*&aYg;?OoiHi`A~66 zq2g9V^;aF$zMhr0u<{P5{(4ycU{rr&Q1xe^;w(Zv2dhx?KaP4oJ~qFh`i=3$-PeSu z_j~|qT)EMEUr_NXnKe-Nqk-8BHJ&!8adbnCV~CZHL$wdJ@>!_;vck%Dq4wo|)c!hx zP4F_RU4gIe_W~tQ{q97Kd!MC`qxwIK>h}g}{T`v_^AZ*RKh*eqzq$FvM5U9W+NU>j zqT&~^@-nFVRvo>+r@}u;4@d3)+o<}VQSp4fyZapj14#R!+6STP*GJXsjvDV!)V#){ z<~tenewdBA5A#s>VHKvs?N|yQpyFrv&y|Ou>NhakSblfZ`*jGW!Kqfh2Q}{FsQr1t ze2BUaA5r5B_ru+Mr?^%m&vGou-nQHqSpH?X2$ENeG%Em z*E^0FsQ&#>?~Tl;`%wZ_ubf%g^8ZB5x1Qye}+hI0e zU+?~yheb$l#e(<+i(>9DzTTgsdtiRj>o70AM2#;XtgrX?L|HHw=@1OWkr<3Su`@;t z=j&bnKB)aZ1@&H-k6M@AsCY+E>vqQSFI)O9>izZvHSZUw`}hqtzlh;oIzH-tr9#a= z7iwLKq4rHMs{hKUe(Ip!2aQqnx}es(FRJ|@RQ++N=VCf4&MZ{@1*m!}QSG)`dKYTH z9Yu}rKC1p(RQs=}xSj}Z98pl?h>fc6kE)*ywNLY-=35R^VolV3>y4_n40V6kqn`JD zs5n-!ir&bO%N@ITc3@{j22{rfGoQT0Zn`k9QXzX0{~@fuY8Q>b~~LVaG{M~(Xj zs(#E!?mi|(JtzKV0o3zT6}5lbqCO9npysm!2jVSM{|zI%`0Y?}MqoCahpK-8^*R0t zgD^o9x84mffOJnxf%8%GJ%F|FIhMjwQQf@8pysg>i{oMRem{uj)-eNmzsF%t${S&B zoQm3qXRQ1-YJNX4zAwLji0;a>#B}$e5GqbN)HvFpKORPXzkGrEyo?mf?T-M|{mX>9 zzxh%3rv&Q$RzR(LQ`CLwhT3n#Q0q0%+=d$GS=2tdgQ57=(!*lAex{=0EJm&WX4HFV zKk9k9ii-OJb)Un=arI-O;`*V+8Hn1~`B2YyNwXp9ebNWB;2zX`UZdvm1r!J2vGgP}SmOl{Hek5vNOhS!kA*$YTRNO7*UetV!qT-&h^cB?jZkz8> z^NWmf4-&HqQg7en zD}$Ox4OIPR*cH3uYJ81~J3E!DzZ&&C+`Vcn7JOQqs*;t;mZ(3jPpU+mpnxqe47EGSb*Zc4L zD`0KXoA5HmO7H9a--mvR{YjU~;OqT+MTaqfbYMp2$vV}<(WF~u^7a0C%tx$CIykeh z_unfn!-~2*d$At*AFw-C&E@8O5~q)=^53BD>u1z+7%iW#_kTAcH5MS< z08im8)cc}Mepjz6YM+iZmtY|2y{LHqS~@}jxBv5^#$5vSJ}8eGR|qOjZPatv8TENH z0JWc&qWax}+E4$W;#{!wO;o)%mi~!)-eMPY^G$~OewY%~uAo^8HI9m?_SI0&O%v3( zI-=V3M18)5qW8H(J--JqA6~~C7{8GFc_|px{}gjRD*h_ebGOqxf$HxDYTnOK{eD8V z|7q#Sh28TI8})Nt8_bQ%@ipGV>Uge*Tc`9zojFkNjY60QE28=tj@k#IsBuk4jbj;B z!Y!!vj#$jCS8Ov0s+~V--O{1Pn+5f`mK(KB#jU(1YW?b?)~zRMUVmHpY*f63mR^Rs zKWk9+wxZ(hM}6*`M&18QsChj_&F3p>9ubPW=RQ8BAYBOceZ2u@!v3gzzZ&)Y-bT$c zP6^j40@QdnpyC}s)jMIH zNA-6N74I>s-W$~Vd`6AyKh*rglyv3sQE`%^+NZX3Hq`j?qQ+YuwVo}lyff-P^+L6q zfSTWIRR2p+_1B@^^E)m76sq23)OhZq`hSetKd(^Z{*D@V*itSX33HK-g&8pj^>bPm z?2p^9ALc9VelFaOs&^B$eb?99vtgBB=MdC*wqhZCi2mqb&h4u*sQBG5EiOR42T!2h z3qMf%E_-=buL|E=Yf$}PLw(+TMSaetui&2Bp{RI!Q1#xT+Q+KsK9{oMYSQ)5 z52IId{ba#3q-&$bI}r68EWrtQ5qo3v%5J|tK;7?mSOUXU@%0qJve*YlVGE2D;(q?_ zh?PliL#qwA{%$5}K2aLD=c_t~CEXCUPn%&>Y-8yjsOPsI>NyQXy%*-18&J>bA=Kya z8B0GzjpH?{{wGUEZs_u3qn_u)W(rilX)T@8EP#qz9JLNLEWZOPes|P9>Tl%}QR}wC z%D14#y$99bG0Q)TTCb~?er)BhQSZ->sP|KZM(({D6EzM$)O>TI`YntaS7lVctx)sm zY7RoZAIGEOEkv!yD%AUWFDl*{RQzkG{$HbhFW_nH>L*9V2}H#&iJE^ERNPvq_fKOi zg0oPc-?wlqCT-&O^$H9m?c3Bn*Evw*4neI`ebhc{g^6$s>OHUoHQvLh?<1E{^M8e! zzo(fSZz9xw%8iOw05#6isCia2Yg&F|)aOQP)O&RpYX0*vA8tVJ`ySQ*cQa~p*H2PZ z{1mA8>CEhwUl6t4B~jz9Vg6<1L(Q?M`A$a7XD#aeb=3TXns4eBZoIis-(N#epTDgw zzb9%QlTr6&9coM8 zHtut1HEtmN19jimw{_n;-k|P-e>?Xc&4Rk$UCn{0=VGj-Ls9EI5B+c*&c$;$4?F$k z-e2+ByLpX3y*K{0^fc7{TY&0kBeuf5sQZ+mgR7q%wNLU|x{z4{HJ-ATu8jVqtK$gl zjXg1ZN4I|mm~&A-m+Zj|cmwsmjo8V(#|xwOeS6G;^D#4?L)G``?AALI<|bVm%j4gu zpG)qd)-`z-_c>YzwV#GzC7g}AU#~4cSy$J84)i0xHR`zyo~XzP!itcK7xE@6{FP;p_e1v0I3GZYuS3@!Ft1rw5?!$6VApE=KK}RjB*1 z+1zL4r>y*<<=--&p?==}i1{&bFXx|FlJrDW+$*T(;4bPp_=37$5qrD&WkRKcF*~+L zt-T|XzA9L?ugN- z*Bis&NL2r0QP2N$^u>*+ezsr^+>IK~JJj!QZn z67@WGwekVxC{)}~^uB*k@B5>ues5a&ODm7q&y6ny>bXjbx(``V^9w@lgFjK@sDpYB zHbcelfg0yTRQ%bf=Vvu)y^o{X-9?T2IcnUWQS|kuE}=0Lu5cs^0&uCEb?#H!0It9&r}dq&WC%`<_26 z?nXR9-hFQg&lYt~a$Sn^58X_T^_qeT?af^;wVW zjKteSx*K)*t8|_U)Y(cug*7(LjHLD6$-%XLKewD%v$)ogiZ;KFSoGPSvLl=mE&o1k zb?mh?e|6APg+BE;l$X3pT%YB-7~ZAbAS_AjW5jAi+q&dE=9;bONlBTG)LaJ<=MH}2 zj7pvP#L9v?&eHBZ`5DR6`%cFc>bIwSH+jW4gQ@d?xIMXE#C3H{LYuVY={R7qULaq) zJ+Ua?K#Z!Wqb=7zsGAsfQl}SV^YfOt{~RapCvjhs&&R7LBBzccr2BKttIo5U>vx_<%`Vo0K@>dePM{DBL;M~bLXLG)$ zemVTiIfLu_)c;2NThz{LF@JHD7{iEpj(Ty4v4CrRZs}-F8y!{1PtO^avMJ=jXZrfc*i((oX012z1C%U z#!xS#mhafP_G4jT_FD^=MG}G zr;WZF=txH0z1}PLpKP#;vyhENUk*kRXEybw&^8D++Zax99oEL7)@N+oBk0ecI+ZXv zXM4)-5pO-$bEw}A7gL^*vovYGih63=Tz6n)%K4h$Jt~pTNxh=v>4-^sF|o3d7oE20 zx#n^A+$60d59y+uxfokw+MK~c*4EYFI}PRhwQJ95`pEs;_@i(=*7_YsyvL*)(>CN+ zL!3w3AnWV2wdGe?oHWM)qC5>aOYXD#BzCEb*^IvU_$8;8={xt?z6mDcZm(lscHK;2`+s7HGp*(`oV z>Sf~kqs=`R<^4#1rtVzMF0`*r+qu;Hmou8hJw@IF%C1wtKJj``HwSq-`0JLQgrqN0 zzL4|RQHSy+^fQ?FRfxlngZzKe5tEykiS#L+UiJbV=7~PDsRGX*E6WgKUMJT zBX2rhB5ng~Q=Pg8iPM3zIC=k(PR1FFx{>I!F*dV)$o7mS)+x?Z)U8OY@LcOig|DcW zo9lMu?<75!I=i|4hjWX?h)!O1`cFW4CC+8G7B9(cFe+%F}|nIxcdSWjt$Xx7(XT zzj)}k@f4$6M=9$3B;H`_;{x%vS((bqQ5KPQ>#baQzm7&W52a_(_mtn_KPGPj=NlVS zZ0>y|uD21Vi^Y1Wh8+H!tLZm3{f?pRFV=#80_C}7R<3Gx8khhNX6vh#ka}3v+$#2bAW~x4ZpszR< z=Md>3HXeoPM_D(urZ6k2%_`sQtGbiQzQyl((6#1S`+vqm0VU$hedOoqM za-O9B2*jDEcGh20>d&Fh5NmUoIu$JbRO-aBe42QV~M%o5c3lR6WqU%>i3&-GEt63`|# z@tRYYAA>z-D6d0(9Sw=Ik#q)Yqr7Ug;jhVhR#0a-*E&v8o{uvcah_Y=VbYf=yGdSB zi|4KU+ketimV&Z_^gE4qs~KY^D<5cm#xRv#fjWLR*Z8!V^;;}m=3rbpMq(-Jb2se^ zlO9OB6r6!phhI5*kImFuWO)^+8-qS3QFei`736yIZ~dpD{aVU;kYAiOq`;eEMbDGWV3;7qhE=c_t#7u1Y%NWzIBRzR> zNgU+tO#Xb*S$`|bGUATd#ukj7MtVudj;Vm!v8 z-|;QwEXmoG`Z|6P=Qb`Ty@oiCs8#F$CmHqL^?nN2?bw8oQ^I0Gotv4(sdw`qUT;@zhFkKbZv=lV~|A8-z!e;v;` zvr=yf>Gh~1I%gK*@1&moSL;J$SEv?`j>#4gOdvNxq zZ9Y6o-JXo20oT5immnPxAK_$99e>gOn)Rdfzg!Qaui2d4sMFcT7?FDY$=gEuFiy60 zRGZth@ufV3{AM_n{>Lbfy2pvZua&(=3;r90>*ds2LU|WXAJU_(kM&&tu)3}V?*-~y zqObAPnMOMu`d#g2>IGZfqV!jRymHhlZFwIVhkmDCl)NkC{j@&F@+|mm?8%7fLm$76 zmc+VF`Ydg(&}KKDBGw+RUvV9Y>r%KGx7c{}Lr`Q3aF+ZtAfZV{7#&eT=%lFy^LWl>C%?&LORB8b2&i$PUPtr$@MW} z|KvTl&cNav#6*5C5V5KG5DocB2W8Ou@fo>Au^eI>Mh){t&Yx)kyM-(xgwM$slVeRi~d z>tZGAr=rDByLi-1NE{!^ns6P2`%uRfVrV#JICGO%hO#=`&jxKb(@pck(YX-8Pjm`;*su(o9H8m>*>U4Xz^7ys$Jir zZ5-;2}S#0tGIA4%| z95>NECnl$#sl>_0S(N(UIiC>YDf#Cp55rtfQnw}LttlIaCx|ft&v0g=?j6n#)SpZK z1M9O7Wjem#7t0GvxsFBVTJjST|2b{1(MK255t;ITX&2w-q`WW|qdWOOskankTYZ(M zYx&tI_s0^*WJPhc;ix zyTUob#{Y(TohZLf-c0LjJbBM8rutrH`6X#ni$3a*=Z|-=JZ%?Je=EkfHbtm+p1d^F z*}$2M^bKMh;mkr>#|!F)r%f%&CZUdD>WB0{lx5_y9%Cwvr>#7?wI$1Y{7wBdzY=(! zdV6V`lXDSuk1~d;)aj0=$s0uZUE;qZFAjMZFfZy@NnbirkgiDE`jidCHnd4a-ag7x z6XO->uf%xC`Qf+m6eC|pZZi*ME2&eBI8C^I^jqD5#ClA6Bk>v#yAExJa(*X&skP5c zTW>tGJaykv7M}DjuICf?*Rh!x@5$4#mpTD8)J1q}~|X>zGacXRafX|3dS! zqa}6UkltnUN`T==eymXXTCC)!qzKyy=tbI*fNO=>+^V<6Q z#`Paux4{^c{W{A17C)idS&UrtlaKKZv5Nhu*NV2^uo3NFa{d21rc!pFb0TL)tMm_j z59Q2G%&M06F=cHU{v}# zf!#?jwz20o<1yZA{w?p#Oax-8d!(ylz|OZe-ULH=FNbF|BVhp3x?G36nB zg7hg3+~zrye#VjfraX>x)H%TQTO0E$+D;;WBze!t>wb0V*2QgBTr)oK^?LGWRo!*?QC|}9> z>u5>d2;w}q@szjq$wM z-Nv7j7{89>me-Yx_{4q9m=a?!hO>6_sGo@Pq3BOpQm$)oz0Ud@Ve#tPxN4KGWgVoZ z&O`Etl3qm2Xk0I}dZFgR-^OjtJQJzA)$&si?+EjmPTpY7>5S_RZNLAvmTGs5`eDdV z&GiZD4Y2XAAg?)PiHNhC{0YqY33c+&{ypj2q-RoohV*RG|LX`#*}udICB`7?pS0Mj z+mAMZHr7kzFS9jOStjat;!I%W1FUSH3hk&&?4*>pBfgG-)Gtq7J<{2@o{8@$|H}17 zOk!hvMSfz}#QWc-mS3HEIv#M&B2HG)gJ_qK`kTr7%f`@zvV4s97VR!m7KZ#XoU_O) zOWs$`u(bO`S!%8;lmF{jLVjHGbWGulOCS3=FH(0I`PGT7V-H5+6*LL4E_`HD??;vO7FuN#7&?6y~DdXY_L%so0l zUTVv)g5`)Y&Eox|w&Y#sd`f;%(ur(NLulWDv5cYYqxIW}c3-ID$EhQR#nE*f`qEL2 zcH3yv9seX&Sn^wtPQe*M{iU2GsF#q~g|G#&?qU?qX%;sU^G`{=_|zFd-v43lZDS(yy?1+NdN!*nyE~^|vL-XD`}X+4II1eDD!Q^V z^X5y}_rwr3ufSpL2`RB5(ojZ1X%0`5VpV)g0;OEJ|Ou0 zpXZ#2$gHZKo_lB4w7N1*oH%jfygcW5KhOE&)b$@x*I%N{U!7Sxy?-N&iSnLO{wC#qoAl4{T>swlOY&#A{!PmMYdr7q_dV+T z)BGLt&TrM~`17IsAEE948TJ23?*A-hex1L6hxdM!`#(jWe#pE3D&P1QNdFhS{|9*X zpOW_rwYr9sUE@#xcKG`d_5E91|53{RFVr{Y{lCrM|4JSD_s{b8bKGz6{0~vjpQFBi zgZn<$KSEwgxj#XfyIhaB{|`xb!@K_?*S|^GpQB#=`-lCK{084#{`bdt_YYJ4oa-Ou zJ0FBHBi^0ztv^S;{=LKf=hXRItEs7AEl1}jqCpvE8_as$oqEf zUdiW_|KBP1pM>%FgM9BVQSJfX`0G52|Na1V|5a}Od-DE1{{C&A|2BVXp&kDnd4E51 zuYdmtb?DzOhiBiT?jO|Z`k#4E|Nc+Py-EI*^xvZF|IPIeg*twj^e^$=U*_+aazEz& zU*f%U%DqY6FOv7?N&f@n{}$K3Lp`Vb{bBxohv)kD|Ip@tm-MfY_kutD`yJl{qIx$mnr+t^Y`n#_gA=n!BzkMBIW)mo-hCVf64nFDf8E<>$j<2|9*yV{0H10 z`>p-{HSX*GexCb3rTWsl>2#RBlTM5Ce3EAA`EW2jP15yQ|18Z8r^RrvaFep*WHwFv z!{J#mI7yF(|dN&04glKp5ld@sFmS9d@A z{kwPWzL!27j*s@n`DEgSvZ*~zZXBigU^*^x@{iKvqVI{}amsBm&Ce(4tosILObTT_U`_Xa=EK=I9p^uq<&$YF6mBUn z%E#x$WWwC3h12XTPlqq^aeBzyj)#3!z-&$Obdpb}Oyi_%>esBJnAo7re~R~kp!2W) zdijPrH}KwN114&c9?r&NX0ks|b0&)3S=p-|XyDGX@fjn=ERFNbr>x4Fj52Rql{Fhw zp61 zu5PD&R_g#rILqfB0&sh?@gX1!ybSVmFuVXP8KrJ-CM`?lz~PTxyeXfKjC$DVWZ>2SuPp(lJ6nB+}gD!k16Xw7|?{_y5THaN`tKfI~u z4CiQ-y!Mvgd-JQFfAlaB}=aN~e~qWf`={T1u#=B@ z+{;cT@2{1&Q*MPOhZi>gn)>-5J1-8&o2R4UXx66#fak$^F$H-B1p6ZEgW}R+;A5jE z8Wv-Lrxy^MTxiXp=iI)^XVL;RCqyt}HBydt(~2jcX=_dw(m1kW8FpeM_{b2^K zpm2EAkd>BtzYlc*4Gm^0zRDWh_sSb_0W1H;ga@0k9xnlTcz*&uADldB?d-KXy~b`Y z-EH?;8_oOguZ1V+Q_Ymk(`Y<=Q5LYaAybK+ud4D9} zSPQSOu|6{hlMD2W^Au1W2s$b}r!kEK42foLA$v^L;s=4#`UiWww1`9FpiJ}ZyaMgzArtxo z+QyLBYz+RL9FB|8baE@bD2^Bk68ZFSHEBG2^tiFx>M|oqV|$%sgX^PaN7o(xliFzP zrrpL)o1ERvcBiB3qxQBgz1E}sMoM-_H11E-^zbxi_K(toIXM0}oAswk&L(0S)i5Yh zFNwNIcr_OPEHvuy3lHv5)*$lA9=ec~*mr3Js=*|wYA{KBuyxFx!PsU<0fhbx6flKi3`*XR7gySY^nh00PzSQriWzx4P}kN9qV9B;C#q@_tCOgy04b zq43rnJ=QYf=?l%~QJF{|idEGI{Xw|5eLuoECzDwY}K^OFr%73=Dms zf%$j{OLUm8H9$??uj7-`Yyf%5n6l$B-Ax)NjK;|cO%Mj|fOxotAMxLF5Ps5lo_&_) z<1wAPIEAU88%KgWm-HO|>Y5Th0ibH|&lqeA3cB17BQUB5Xg@AAZ3ZFB-z$q<{ju^fOQQy7XT{_k zX0HVj1{HhF0DN}N#PqYtnJx#+m|ba~t|$4}?txs0-HpjF-u@-X851R83jqn-WD=5( zfGF)%gf3D;k3c`($-X)}of_>mCRgBX>n2(?{GJXZd*NYRSqAsDkkJ|7KP#blk#GLu@?v+=>~NW}p7!Q5IDm-A>Otfyac`kF-U!1$wa z0mK0)k~b!Z-j=v1CZ`$^8jO&k?!opL2FNELUSGT}r_|TgRj<@IN(pB0`ZkKp)j!FUdnCGgbx-=?q!D8Ez?%y zcsf~YvT|9L#Xy+Saq#4nm69|jTBMW7@DSXar<<(roC;?=nVmp|xxi9oeU*x-LAp8Y zLkK*_o=k@;>XFk5^5NY;AYv=P{1O``hX}~`>F?+H_#i8ugW1;`j~hFUuCAR%YnSWp zqwU6Kv-_ANJk4gCXB!*IdULzc*(crHe$?9E(Y5tSlgqANYIb(SDy=`>7u&Vo-flgC zD_U=NVV8`Vdfe=M(tOl@A~tHh-RnMWDA8$r(%R;-zuRmj>-*b}8e*o__d8pZOCL76 zZQbneZt@fsC+`o(Hz#p;$T>S1!$`p+4S7P5BmFV$u9{iTPQi^6@=nJLI@iHTU&8pQ zl2W0q?I4byFfwE?AV)(L1}25U$b&kLXJqC5lVWzRYw@{dgKYvwx1JAFGddqFk@eG= zsO35cO9*gde%PmcxN8l3azqi<`!qg%1lFc{%F+cI02bJgk|EITT+e1yFg%*`(=VXR zTqnSjEzHOH_;c_sbWPdQ$wj8bIQyKn=a&M^(8)91vg}!W##kPxn(=Iq7YUlilS~xC zRE~T%U8D0kTqAr?$$R?KppaajjTyQueV9##JfNN<)dO20PHGdOus<9bD^O;(P3D;m zkaH!!){RQ4*dE1Sj2}iJXu@qcm_;;?p$G z6Oh()dLHo{Lg*+Aw&#z`9wU0muk z_x9JfTN?>4Z1U6Erk=-I&KvFR_RhM#*xqS(Ko=WrgsEHUW^<>#(Pq{V?r4 z=0z`YIUA`h)%TK(PMbHmcDw0@mWgq;$;SRVdC&HQi8elIZagllPByasq4XG9UZfe= zY@A9u(OtpP6B^#g&JTu1o`B=Ehl88aD6<5iRb!)WAErA}+Zx?MKfsI&_Fv@80!xf_ zZWk6;nTWVJK41}PUBXWH;DrnHl5>@X>V=CqB8M_>Zy<<#3RV_%MJR?S;ji^AHOkW` z`S^%gMxhPiw5wNuSZtzLcRB~>fK86l-P!p;KK8UvF}bJ1{t>d1_Ek+d~Iy?_9-0mTwq=7NB*%E&~BWaCtgmB7hLr1=sk3)7Kfn~=t_RPVqwL)Mtd z1184!BGc}$%BFAykmWjUPqpe9@5PFF3&qk4+ENa%uPxX49^_h$rPgSXg}S~feH%fQ zRpczB>5qTfy4Fevkd_gQ_tVzOc#OgOK~8mX>8(I1QWsm_{wY5aQQNiEWazR6E9iN| z(V3wBR;9YO+1LgA+ow&I3CSy@1zlm@rVo`r;oT*}ND zB*c1{J+$wb1rUm9n4^26?bOMN3{n`_)8OXB>^t4=c6ul&*Q9eT*b0C`4K#s4RT({EhDXiAv5EUr+WDV`WW2~6q zm8;t4e3G>QAYeMvQo$^BbO55gA$s2ptZJZxYdZQhD(V$eG)GsrM+_xE#}vkirmJu* zCk&ayv|xzz0fGU)x)zs37(-`q0?du*1<3bdp1FmxCI07{b}WMz-K(qqR#P|`7}qFD zN>CT%RR}SRob^JsQ!P3Jd>ZX*QSZ2Zw~!8s7tDZy76^^Q5Jj*-VEtVY24rxXNRWS- zfP3AL0!Y8`rQWn~;gNX34YVl(`-Mu8Mjz%pp6GJlM6LdsY2W<&5@j|}^qfUqrHqUa zm;tm0sZuHzp#kgC3)tG>EbwXpd+=F%TV19-aD6WHhs8}DPJEf@x}I~A{$OXD6~%ZM z5;wGfHXfC($g5X56xW_2v`FDsWm*e0$5od1adnk3i?3=tbtl5s+Kc=@IW*CK)2DDK zXiO#PoQr`skq3!I33SEjotU^A6Yr3K*F>h_ipsp0Xjn;_fjp)}ntI}}SxK&+1qE&! zM@~){(A}CIO4Y^u4ytZo$aB!BnBK9x+XJcKpTKC;lws)(EPz=2_|Z~L78sCvS?5~n zIj##pO|?)b$~~6iqH+JmWL+{=1dO1Io2=dl9f%pK>0}7Inx793rB*vEnVVp%k0m0{ zQ_CL6d|MW>(*W~;o)&`{ zS|~T3JIZ}%7$rUuK>4y2Hja;^LDTEO3|32u{22Mo(O~d#Mjpzh7tMP@51~=0KhO}E zamUr|7{gk}tOF}}0j?5=ib7m~U~U;|mX(?s5tsD5tidI+!?G=<6m{?R4NV)=KJ7^D zv>_XaDGfaZK7avdO>RIXk_{{XaAe+jPiNT8FBWq6im*SV9H^#vd}}j*f5UPzJqK7fPAi9i)EJDCzcAy{mlN-a#>r%Dh~htTKB*3%mLFh4efd^O4j%8=vP0@moVQ8hqGp;)+i;HyO*`GhJl6X)CjpZclv0)Fch!=7lE zvZ-gcWHNNo+@9^pqC56ySYFUsS+*s$$eq2-F#8~W4FG+83WYBVo~KT90BpF{QvDwl z>-lGLOOf*bYgOsCE9zuMV^uh-$OlI?ssD4@W&Tc>!g2lB%n$XKn_Rl-rb#l~LZ!PcN44q5jK+!mUQVY1~3AE|0LK$HpqUbv?=(eR!M?Q=Dzg_r~em ztu#2~SYCD@=b>1uRpI#ex(^)VX0%XTJj_CdeCrl6;1^3fMtC60h~^p*Gh3w zOXJ3X0?QPC^<40BmFp@khEtWuuSw>e?F@!WV~=LMFBmWlBI|Q=cv!!k4u^VNOwhXJ zskGZGzFv$4S;#-Ob+nKlp=Jla351HWo{wiZHHaCF6=bUTiVBVb*f9nR75pev;38L9 zO;91yGnR48byB?e23FrjT4u3Y?v#rO{t4azVl+1MiDWDnU1OvDn<8|j?#fwIQT#8%$R|6q#IZ4nuha zJ4l1DyrgfYM^XkeQSifnw&31TvaICN9lOVeIR+g0;0dw14N$AxbjoTM6R8?aY%}Kq z)rt$FVR~}i_3?sv1tz3(!1x$mK}HGXY(>+1)ifIkz~shLugL+*KA+CfiwRRsR&5!pRy*5Uq?ex)pYq!}*@b>9-bnW)q^4)3n9=Fs0r!H`Y*hH zvOgzHsP9p#RS;Xk(ucTEuP}TJLd@Djjkk~$pBYi0 z7*1QX4)a^nJzU-}4}doU1&q0kj~YKH(^2zPWn8jVhsx^u|Cr_K5Tp9cqJI?Lf=L90 zT*@c~-%!$|Suj!!2gWA@+*UwN>3%ELVn&-4;fQqKHTa=yUA8E{z5FSgh*vyyK^i_* z#3WQ4#cOoe@W>|^%)$fL-)J!l=o))v8%sT6IT)gSOQ!!&$zdEOn(79+@F0(UH!V_W zxr!fmj-+4UNgA`xWzPa#MMf7FkQtKzEo$(+~KE=zx=fSj=B^T;- z#8!M0pHeSNd8kfw{8MPny_bB;Wk{R|&dR(R=VS9za$dnKa1P}KdRQGe=RpU;GN}a6 zs(Lp4m?|v5TS@l0*IQDyinO~Hx6(Ji#aIb_ zR2Z9Ot1jNLnB8y5pW>Mg;V_sp6Ag_F98rpZ&x<7x{rHiI&$kj|}!{C+k7V9@zo`Co-~Qp%mVpyANWu^*}X> zYpS=~Oc40+0<>}7RV1MKG&Nw6ToLVV#y6Mf+`x2UevSQgk6wq@ODy-I{=a4ek?bK! zbfJA$`v%(b7q1-53hv-bv#deY!jsdh`sHkOFfs{^z%t_sQ2&yM52#y49^n>SltI#{ z7XyErUi2*~*~Q%pMZB$n7hNmyjJk5ga4%!HSf(8Bo-Bc3@z<)OdKI-v7ha-azUM*s z!DnBi$A4`Av09DXg3jb9K+_lj934``JvBPw=z7l<2+E~p&DSsEbLv4wEIN6ss?|R4 zl{p2C&f|e(Rq$1k12y<3{`_?K`n|AOViZx3CvwRVLmtPMrMM({sa}lD8DdE@}Xns3Fh?WV$7>iHbEmfJg+6}mDqb;2uhj&5{}p2+HK2%E#U6)gsIz|duoBzQ zSiX?eVk@7U6+>ei_RrZ)g-n}V4P8kU$}SY74A=-^I2j`YcNoZygpdKKj&e~f)MAGa zFfFWInSSD^Ew{sW$Nb%H2AwU@?+yHOe7m@T&kafNZafWF=_#W1H)c5pw`dq=XS>8x zS12-6+OnK$zx$o<*yeV&>sQZhBMR82ZdtdN=l+}iY`mr+Ap=rKwl-tJE1ct{CV<5u zS;9bc1PFz;nahwgjT0@Lqe+n!%TX$~p+7cj+=}uX%l|vPcYSLOF{Z_lbk4Q6(7Hp; z3WWDZGo{-`LJG3!qmM>*nkC)5VYoOVti*CZ&qc7jG?ckDlf5^nUoBGQtbxZoiAH zn99c7)aIO{9H=ml$!%?v4e9PVR5E$k`1rEEK9~<4wmxbl4_mu(f=(WG8oL|K=MH5NRgR^nW{J)Ljo6>;>dwWqd8*M)HO0ql0Y^w8}^Y`wqosr(!Q zCyhsO{bm1T{9t~NJj@TqvkY_TL&X~C2IS#)%L~DZRO`ZSuUbrekjf_h8&~53axm;- zg%|`|yCH{x&l7_U|CRq02$;G|1TbI|Kw$Te`HDni7_^+S=v4{8OBWxwc}fR8ce1T<+Sa{V~DOOu4wC_d&dFt8lR|s z5zY%m-JT_*5iwc9%5^p!m8b32L)e#cMcem+e|MDUVjc8PCcYG>U8T|8=usyRFn{;iR8eaW}Kt!X2Kh7&(z=$!UA z>tXm62%>WE#jmCB{x2~U!+E*=!#G2^f96iRY$-ElCS_?g;GYDcKeq3BquGCdb>+{r zzvPO#)C$?)p~3QOu%6j>Lo}T-xCQL=f?g_q?^-_3dK@wF0;0CTz+90$L{7v9>Y?1M zPQwM`V1LebE?5ilF}=tG>!C1^$`5RtZw}p&;Yj402|sXC`vP1{ zhJ-WV*%2(P$ys~j;W0QKK!=?T8%P&`MWt(Ti`yYV#$U@U6?Gru;7hx>6v>@ zEWZQewN&yk`lqF=9{xAt$q5<;$NC<8)`WE{E*nvXoid z{9cO+ma!dc_PJLYyl`cO@l=06k2LIh_wtKY+w|paiHB2=)c5CAa6y#=TLdXY&k`|^JPY>7& zx|%NaHtLhg2y8-}@CNw%(7dq+6fsRw2w7FdYFn_Apm9nU2KVakOwyfs_v7uOqPhT&?IZ2R$PvYqFn?>1Rycqi_{>4w|X?o z&h-N?o`FAuc@>1exi>bCy(2^oBJJhS(A8_Zt;^y8*4x5x>T~B zM245%o}1ntfUmFtV+*cg8T-IU+Q8A80{gq{m422y&HxX7k$t$Z(|3A$2zNq~b@jM7 zLaQ4tsk1fY@lSD2s~^g^Aaq4v5g_GUV6h^x946g+|-|gjBNK~J4(iReL#F$dU;^AM+CmcRP*dcGBuKwx1;}wuXwshvRG= zWv9ag6$6VKzQDHx+_Hc_#$gAh#k?Rv5kWrz5l~P<#~Xn1?h#EsRMEXD^#CLEFJO?}ABS*6ja9u)r0um^()V|-29(azR)?}dF~ zLVM7jtJ<2hWLX&&lf(1?*Sf7gt zk>t{onGmd*h4e`oX^fiN&VSTK>@F%;!fpN0P7D&LvSM`{iYs1rAzO%>?Gg37wVh0yjfXDd z0jOC*L`y4b5H5^^DKq1(779YDm&rAlwt(b%ghURT#g271*{N^-Oqh%42p*0#W@>=a z;lXp{uCib)Pc8MgS))MmoH1)oRFBO!^B76YiCAMq0i!DO64!CH1HZ0A$=H2;yZ zm@!~ep8NVSEtbV_Dnka+dyx&+}&r!;c7K zp*wyRpXV7w^P}Mb(t!oJXcQ;_b#KbGk5KWb@T{-DIX}7?h?QgxZ+7DA3B8mDAX$=5c9?VJ!`2tf8}D3r<5+XQUulQn@d4s|t6pwNy-oUU?)tm7)XAbx~CRva+= z+t650OUhazjaMcJ0Q(!^Z``gU43jn#D8t%eww_&gKLh&JA()U*wzADL#kG8`kxS1+ zu2i=qF}PpbsHk83oanDW(|uI<|L2R730zvoLK#SlO_lPT^Vuc9z9p zdpIL3o;ddH*=KA{Lf$+{b{ZQ^_&6YDhwv$n8r_XXhvatSY0ECp#Ncti*?Q9KDq-0@ z<#oD`8{6AuD3zVYK2GQcUY=|by=15PgVshn*=Z5!#F@pNon)uIz1e<3746-I9x6 zINd8TU@PX}1Q}B~NBGiCl(6zv8Y;QNxSW_`9BK`eSwJZ=(W0_JkHqYl5eE1ON6=>Y zjh3hyeVed2`W0J_o3hanZV7HqEG?TBJ+<4C+Q$s+D@Wy1+kF+E>{}RUe}?oLN||UU zXhOH`7+S)xms)&wUA~8x_BU$j+^l4L95}UaO->=1Wn>f{%#C$7zJMR1h@V38r)=om zkq-nBQcxyn!`@D&HEPi3$pX5HkwAauCqmKSs8VKO0zgA9n?@{DttmaT3hd<$t|?`q zY7t3eS$bgde4gw;a0zGSmpa-ia~AMcnY)O%qMCY#5X4%Udtevp}G(PNzqhz#0m9!-p6Q^Eq3`cxK-c*yYe9PTMI8Udm_W3`eXtj+KR)xcz^ z0mzH$skU}2Y8nZ~-LGH}!iHHEz{!JC2$x;U&5F;Ub!1^3x4PsbEhgTZgv=#0Wtwpc z#fR3sE1nI*o(C_Cy3qH=2o?ZP=N z+->Z%r2X6l!R#ly&ArApzXVw7cnqiA=F{|(CMXMArgo}!8YnzT5e(OV^=`YCX=skj~GF(GClLeS;y6o{XGtpa_8A<1!3=^)Px8Eh{ipoB33z1#DY`{XxmB zX^@poKk1t%)Au~(JLc@w->Nt-dY1))p* zSCc>Fe_HM@Vs@{;;j*IEq6ZQxqVQE;vsr(=)0*lDer!g{RxZB7$X+lv~{NZMHCKT&8Y;ecJ z#nK3CDdbC>Pf5<~!G$=^o-`lQ#Y1DrWk;c1@VWxq`<`}ITUrV1x-&v;2?DWDp14Q0 zLmL97jw%MKZy;N^F)3@n(@RI2=oRT)k=`-=>fFy9y4zVPS)yU+rgtpO;} z(foNv97)E_oExCv5F+7cQ^O_BHHAw_zg#@&SU81>uWAOFWLH7OvD&w>DJE^y4g3ui zQm=h{oV0PiO4?_Al(ht4ZlA;LwDrFxKZP4R^}^CL_|2bv=jY!8ah&3S0rW}FXWbBx z-eShlc=H8wHnQkILB0AWXX#Aeb5JpW_KX-)1XN{Pxdb&<9gHNN7f_T{Z&Lg++=`LtRs45qi(HKPDaRLG)GWQV}g*dlWOZ#PGVhV^B)ok-sW3t*qd-vXP7zROIQ z0n6z=ZBsmD&zCC80yqSdM`%khww3GAS}7uGm6b0AAGWXelKD%#_AA{}F_>uYe2~7n zVRb#$>%LQ(1Ha-c8cbB>0=VI5@@<_fQK1mbN7A<1*lU(3{2GO#GR)*9#mHZNZ80n+ zD;S5fOE3ASzMXbqwxGQX*M-*l1x)|RDks|b9{utgvQgY12(f!d&L%qH#u|G~4euX} z*B)F|$#THgt4>n6`JnocAB2H;O7uLKHX_v88dE@t;5y|OaJm7yO<;V+74;n4Nn3mO z{a1O!-W?=uafkj}8PMAn^+B7^l8}_S?_SatK6(e0nhwp;jhPk}5h**_o9R02_*Syl z*z$8MVC->6;Fn$O>}n?k>)+tA$5|EP@`L-rp0oJRlD#GZ!5%?cTYG!F&?UW>K5-^7 z+1p9>IP3zUKnIuXKSFBQ+i!My?Uc}~?Zg-{#>d#^rl6a5x;}qA7cpH=$@%FfM z4TV#Tr;M#)SB$=)<%>V%S!D5pWi`Zg!1Gx?3f>#(3gLGE)WuWGR+HdYrt4rbClr7* zM0)_@W`PQs1f+{a3$os{s5hmmPLCvegXys&OZh<#(+h1mN7aNT2x_~wUcmOC=GntH z!BA$Nnkt~W2S8-H@ZU&!Eh`N)_n}x>;J_>#T7cP<$rl|8mMTIdWC}g6StjD-P{>KV z`6*7Ydx|gfY`I34-2Hn%j>|$T)OmYT4iRj ztDXT6@xUHff2j|ySZ4NibUFgs5G8>+d<-Q`4X=L#iV~GIuPT1UVllo*)$4@ z6AZ)Aa{s(s%@|n|y2|dlH?FM`cl^RRp&pe;y?zC6VxANjqSx4j!~zo1T|w29AFXib zUaD(1A5;&~Wa}KK@?rWGE_82Oq^en=^5Ns=w zLUU@kqL|FGB{lJ#DMmpRqgP5Av0EHWgNl=jA|!s&A7Z-PLz6X=q0$qq2$f@O&|@md zpQY_E43`{1=A1gD_b3zP$et8T#?V==2kGhEW_hkG zwPfTvRa9p?dI4iuYRPn=?;unQq`Idaav0yxVKWH{8wzkMOp!U%rG~9l%Pcn}J6>&ELf{l^LCBS{I)4JnmyG~FE?3OhQ{2$Jm_jxOwQ_tA z1G9$lh}&_4O4$X7nCY^M;v-NUznpcWtDrB=?$W}LQo>gIS59yY0R+klYYWQ7%CTJr zCkpRtC=uryZ7tQ}s>+pzO_3)JQS*o}lk6q2(-l+@?;`uHm~Z8!Vd%m$u^YkA;wzTL zE}Ws*aDbp}_x4rWL@SSOnd(sDXAk&X$-1$LI4N40(xjl$HH*plH<6kpFqP>$CQ;89PTVVJg>z`lW-X!!RtP33t+EAfghJ09!x`n@S{wQWd2q zxNafOgQk^6FzmW+J)RrW$tCI@o+33#0Zu6qC@r!eSyvfBZsn_G83m2g{gM7Ki2-LZ zVaP^^#MbepTx|?4GwCs=ek{qtYGtk$k!Y+>m{`*htA&$IhXCKGKf$Hrm{v5YV6Tc< zwhk~fa<2_?xC)2&%ejg7cvxW4)*YQNV;9yG)|Bj6F;}jC>JLP+jNcR=s{i)xQCMH) zt$~&=tg4Ld+QYX|#7Nvb8doaj1ICS((-&mq_?|oB;v|DbvLi+Ok(Pg@$Pbx}p&VgU zVu}KV!_t(VVh=@pSbGR^L%HSAl9dnG*mHr84VZB*mIco9-By${gIBoHM?W8~V{u+7 zJ7w532KbIx)N4YyUi!9Zphu<-(bOb2~H`~@kdq$YkKN?hD?v< zr^a?UC`mT*-8OHu(_VY0X@&R5+Gy=H$=%;>2)ya}u+of?%omimUY;JE0$8fKo5xIf7YF)mN40 zlpDe9-Dl$3tKxPmjcAp{?glFf#gR>GAv&}@Ir?@Q@myH1l#i+C2j}(G?_ep8q&np+ zDuwH0Z-slz2@y`Odhpe*bY&gK*8f8euHdLER=W9!@(B{;AU73{FyaXKr8_LVf-=JN7GK$`k zVC0-Pe#7pETQhS>t1fb0?~@Q^h?}g#U4%(UmN*huk4Mi-C)M2$;@VNVJIPjg zHd>(s+atq+4Z0eRPYpSmt<>ps$O+tQc?X9T(^LxNc&%+yr(m8GZNNWU`$-uJ4BwU< z3|Huudl#Hb1(F6Jbu7+1RA2)A2##8d74OZZyTK0Cn)eJ7Y6i0LSLX=@BeNa;bkQK)3(R+FF(W_`5ONQP`#a<;$x zgy|+3J*56Ljx*<8E5ir53IXSWwojV#^Fd71Sh4d-7X$rzov1_xxQ_hz^KA;8`LS0P_v3_`1B6JAsfj8NKY;r&F2l4BR!L;*Bh{%7 zpsDxu^I>^{+FO&xA6X3!=g7hG+~r1a2HLCeGC z?Xy4OGN4t@2 zDT%KGPD_VISD#|DlF08;UF3$yGLeK?3*)ymQYE@V18oRb2L6j~3Bfc|?@pX%S`-p3rOsYtkaP`J=A}wop!=)k>@IqH^5B%JD;7^Q9tC z1#Hb4`T&v~Zp#RAws5sjQ9Oo8*DDcWe#5oO?uyiQd5oA-U;Yd=Zk;ihsd;C`UgP`^ zi&;+nVtZZD=P)8Gfct7y%jrs>gdzcK0Tk+7S5?o#S8Cxj2=#>7QQ{RIuC*W|3^2?J z-LdE3IPHBl(DXVj`j73r4j5KbYQ}4SvhY27V4E73K`QKkL&d1kajdxbs*w2Qajs!z zM%k7XG(7D71_zsz848t;O*w6Vf|kj-!%N?i{t0?y4plWa4SHmUs9QsUKI@Tx?h0F} zq}dqZnTg3j$9&Maw_vdXOhy@-3>5#M2Cr%zO}N})RmnpeCOH+v7KmkpjT9^SPQ*-@?*pIOQ7?3kp%SJ0kR z(aXVjgaDV_Qb+vwkbLdV7$LJ70Ki6c`i)(&j_vHMZEmhTfw!|ocnuyfH`B399Yw;Sd)3?3%XzvE!^^;>CMfC7kJGbVTL5`7j? z%(p6k|315}M(1x^tM0yAe{}aY&oCq}0ohfn@tWoLilXjWut*EOKI<{CXfm(Idz3ub zP0*3p6BokEkE)g`{*zXX5KGHQ7o3bXh7Uua9LHvt$WY(nGuP3gd1I6aQBk{t`X*q- zK+|tw0>g!JUbGh7i0Ac|!;~S6-R3%qo zitFAm^mY||3QU}sT-`Y5FTSFmMpXg^-PCaVv2#IQMg9!OK&d>3z|bV`5{*q#bQ8Wzfe(H zA5&SJ#ph%5S|0LhD?`2AB-M zfHI{~(mWcX!<0?ay)Wb-X+ng`2#7S8&O;w$C6fscY9n@C*DbPK1VJx~Qq0Xj;^WGj z@XTN@D&wm6D!p4Zx!8u#(=a+}Gedf1B>g~JoEOD7DKjs<;VqwN5?DnASY;2qY!C>| z)C|vDNnsY4Mle~$jEqFIvR9*cHCwr?r?vevEZYhg{X3&*{yorf&^mwPYK+BTg}wwu zITIgRU|?v+nQ6P46hDgC!=6t$LU7O;t|SY?5OFa}TPvY#LAeLy(FwvpJzSFBuH*K~v!h23YLEvqwuR z2-RbXB-hAdZc&sJgJ~NQUX@qh>ov+8*2`u^r1cZD$}1Aa4Imb}8rmVVixCr7aaN1l zdTltK9viz7^&HM0R`I}W_1kK$7DHSr*4^Wka@Sc`7Ep}3;p&kLWArP}wLY?jN+YQ} zBCPy0yvMYd;VI@isneasS?J~?(k7)c`lgyf1$d4e>q5u#(a9|=9mj-=9*`Ox9lx#e zSSqx)2sDrI z$#10QI1Sngp{b}U#d=AjBWC;mftkUhtE-I~6Gc6%!d;Y^9&}J38%l-Ed&mL| zKG-&ia2E)R)kkSOq~Q0MV=|=bJ#*rOcqmldXM5k7?5rf%WLJbYKU(Wa$#3r6A9{K#9ejQn8|5 znyX?=jx{RyLZ*#l+$_{*yWx2G>aN`S>kq@$U%&CKziiRPZ^bt1@}m=~xxt}?!(XmB z($37Qh$;AUxYdEd5ke<^Y{_-kPs3t!b~KzMUV>uXNwt~zzC zpKF5H=n;gk{c`V{MB~I|m;h%q@Uc&_k*X^?(J&dNSBo)D%9ASQq$H zbMtiNZfO>9cQ0S9zBz>;(P&r>&^(;k+Mf-KN7YW9-7+|VTCAuk0QmA}@Jr*A1Pz{S zVuBJy(&5(R8Acuf43S6P?AB;`v|+(;yR6Kr#R*H2n@c)hO#5D+ec1T|-NAbY&F3ga&v?(DeQg`4P*S1*9I z!cW>>$Xu!=js5lSSk0UFcff2*8{)2b`I_%te)p=)bPM&3!k$63*~eyaH{L?wt6B~adFWxTilb(~ z2ob{T+{l8!#X{M1!v>56w#4(8k_~AYae_xEP@VV-VCqP^7un|phzI~-<27;IbdkTk zqBpRJFWB9eS^#jRCBZ*5j)OEYG5y840)X`zEj&rNeAEg%QVD1EiFum#2y$!AV7>OE zcETCUj~Yo2=dspiW78ez+UpHH+23u+CAGKT*=jzs%MQM57Wu8W|D>_KpY(`yjf*aE zK@AHm-=|L$kdIva-+NghKQ6!6&e9MBwwFCG!e&$p*DCZuvBBr&E!fjpvM>-Q^Q0%C z1FjrpK|r8nN!zWUuRXR(qLpK@!sFnVWt@(F#9^?omAs$yPP2mJ3Qnh%vf(0YKtxEP zP*AbXfDzL$^DWyZ(J1(;6bM5_{V~}mlE{$PbYP`mKhjhrGxp+7T3$8zEY~^dXN>-6)K$xkaGH0C>!w)!$##Xvt^U?06Vo zrBjl>G}IY+LuMTM=>0GvSa?85xEVy4^rJ3peuquVI)&J)&Q3srCmCoLmxHtDng!=a zTpc1_M5?KqKzFJWcZI)~JhyD9jiAfZ%Riy_uw?qC#>i_yx7~?bBh36DjWS8rW-ni= zdrZk=!)V1geIV8m2rk5`ti*Odsu#9X7G%HlM3ZZV&Nv6c6 z%G7jJ+pLiFVeD(6i=4j+`_%k1l^FAr!uh05d8&vCqHadBYBM8{vK7KPq(Hs5pkxEZ zA-Y(ZL>}LJASL%B+I8^&|6GDw{>4d}>%?;muVXqU0eT z*(gNo8&C+F7~qiameXO;`oW0WX#yFj&8_RIO)PS1p`kWB^jbBQrS+}2k>z!opch@y z>)(FuuL*WuQ5eus550PpLSVLCRC&dFHr(ID*pwB0&7oO%@2f|q4A%qZ2(b|&{Mg(J zOk)Udn|+JSqz)e2)++6Zt`Enh@)fio+wjUO3zv<*u5uJXVAZmii>cIF(gy9D1C)*0 zs_X=sB)`wd7F0X|7$Wr0D@CMao&i5?Ba3q{2$p>*lAgc=#n=l=LshTHWzSg8f~5M2 zw*uIKhwKzcr~g;Cv|e-)w0DbxTW^kI?ARP(caFKT!PL%i5c1N*)ZaBa=c1=ItVZnM zyB5wRF^*7!RIuGeSX2?4{CM3f2%wb~ae+RS2#se!-pjS}Zj_)=@!Ajg3y zQBf;LugZ|8BR8}RHu&aQ#8z);0~Q`k+UEhs-G3wcWiphqV1wz;2EJSLrcM`i!Y5|S z0*zTC`R?!WCku$K$9iWLbQ5+daKpH`TcrD@TMSO|s*z7b4uSP5At*44Oclh;3ad+$ zHQh zss^%PPB6bL<+!=0Z9&SBcUS9Q^>g%A=gf7gEbXKaHIc4BH+Llstf# zzQ(}^!90yg!MI>)Cc)&k_N?%S>CN`m&Fa~$^yY@i7M3Rq2+>7-w0<`l#4aBx_J7YB zWK;f{17u~t=J=G$(k56kfq+R~3BfDFZ7dZ8eo& zfT2h|2{k}4aq*o??dS#-TSw;f2C)kAgrOUI0F4TUP1rAUXNVv!xz)4@U|JzfP6Xi0 zghl=sKEiYXeA_&2x&EFES^O9}5rr)fr?@FsoS;f&yini~Z^^apruT3&-fFrJ2k6~5 z8f|WaViRj#E1W@+;QQNMn%R zn9H~DqGXQUM)5YUv5#YbwWmte&j~0WFQ404f3SF308hpfZLPLF$oer`0~^&micJq+ z5XEt{Md=$;0((TMk>Bi?>MEwWmFu-EA4#M`t)=Z5tj! z*nqd}5%)$-LZq|y!F(zvL~l0c6eqjL^+C7n;_~>Vy_s0a#6Gyc+SRJ(aIA4+X<0<` zNkY6-#Z=kf>JU<)nPArHHL-LN>LG3JaKK-WKn@{uix3W*?VWgwt;-&E_Bn>(S+f7h zdNWwl_D^VVmh7L6am~n+efZ9C`klMCZ{5CqJKWv*J_$HgMzdd~@EEnzS!+2rYUxW4 z7tpH;D#Q?uPL>2X6!HKsrUJ~YuJWABEuf3NJ@GbC)+SIG zjE80`Q7KPI%&x*Il(`RKOp<+5!-h+>lP6}>$`~5KODMQ+`HKrKSn;K$GIVb|V{^zn z*|(4_LfjipkA=iBMnI7~@R%ND>HGQlgPT8p^Zhlh;^%{Vs2+j*%?AgP5KnMfrCL4G z_BV`y88=ozc2xza0sEs<_Rj#(qASalm|6nGJA5st`9U5`%ugD-oFKiQJmFw7cD$tP+?Ew_m7%(<}L$CvVjW|Ai|lVJzP9XOF>0s4fWm7n~BoU`Ec3jB`|=l(1|X zfRPO92yqWq6ARgv2`yq>DVxr?3L*#T2Ch2E6MRuWpK&}L zsWCoyv`_T6@~N|1kF6qfV7GPrfZ1eDq=!F#CGl2{2kGL++c@YdnHwZHw{9{y7?cfye(%+EDLyQ#R zSkCv!v%*lBC*?+#14R%aEuUT3k))hVm9W zTXoDv$9V$$m{&O&DqV2#ihX4Oad?x|c+Gf5m7o`tL$L?f0W&Y^2Nws{YO4^4&xOm) z<#>zpb+I`B$0fXT)oTJJ&ZokEaX3ggT_S8Dz%571`joIvzOw{b;M-9H4DMumnHGMj zani?QNZ_wpo+hN~^J-xlE1;r1>P$%% z>-2AV#qvF~r6y13cHDFFtcjOlqL>GX9qRW?Av;J;^am#^z@rsck}+$7F%4HC3gN&- zM6qf$1?=etZRw0kd~K9NeSwrk3{23@3}&RZhDxn(rRgeFmW#F7^y2I-UQd1a>Muh; ztUoXv-`r<8a?E)KFYm~ z7VH+P$BY)2>V`bnzG3IP0)E!S@FgPU*f3gCN~eI08k=pweI4o-3e_XwN1b;a;fXLg zR;|ArHtx{j`X?0W=gLwYaD+k*r*`g&z)T(;HoT%8ioHzcO@@Z$g=+*3-7@6BD=L4y zs1Jy$+6A#391B7>GKx$oaIH5ZV%`l7@^#Y}PeNE4 zSEaGTn**Rzt^4en@{5fKCh)NJ2Cv?TW5g{MnGP4G{UbHCc zLQTnuTn1Z3U^O?0IXF+|9IDP9EaTk2oxYKNn0_a{k^bWxFiV6bgW%Y_E5Tb0ltds8 z#IZ&7hP|}cqT1$?f3KF|NTcGuNY7?xaGiE!dL#LywX@z>f7&Fmr`=zKv_xrYrzI%I z6FQzbOFk*iiJpIvlNjkQJPe8SVlB8^@%~<)SUL|u63GwW2t4W=YJhlDn8i0>7VX~2 z>S}UX_PmOve03?|Lr@c|34o=8*%8NkaSD741C|`Hdu?DuGbs;t40PQ&Y%Q1Cqu_-X z8Pdh4#$Rd4mDQJZ5&}zrpg$`muyULbxn3s37EkrDKplw4Fgr&A(OiWf{)c_ss1V%H zi(Mqb%a}zb3B3ASleZIZexj|4+M5Zoh-q7)YG2HVX-5&{0-ENaq@)y!cAY2YX={8! zV)f}~lCV()URIk#*lL6tnt=pikvo}?w%`iRpC-h+rh5>paEW+ZDu4wHYskyp`zuok zL|B`*WJU(b;^A)iXppd_wbGqW5@}pdH2}k7{yT1pTLf645QFaH*b6>zFu@A~H!`b23RPh*ro3zY|w-Fq=xR zQL&e-NWqRaa~p_+`wHEMT%m;sDH=14zJ|=M^Z9(`{Cwqz<66c;oiwo0I$8D}9R-d(w^ z|LL7~@872WX~jfwa78T)VTw04?RpYE*Q{uXSO z97R@SBfW2%`q%IWDF*KusDh0?*zY}D`F>SSt>DC&mF57~X;{ts>Guzc>9@d^?D$%F zsFij<9T1s<+sOxa-@`Pn8GE*_i6s#r=PNu1#-k@y*sz=zW3?CFJ}*l-hcP- zmc8_u3LNtCXJyvlGcWB$XoL0xVj*Q1R=REhz0cB`@Z=FT6N^@PA2MUh{LbokSHD-a z+XIj9Wz*A@+xOGeZzXqE-eF%9cJ3@ao6XLML=Qs9k{!r5bID$CSq+wNVXCHt$R$3i zSd*7u7SoqsBya4@W^b$zf#7sH%=t_1+`gS+QU0I)g@T^o-FIV-C&(!)^8`8HyBFT_gudwCrlK2nzJr%Ue`0PD>5aR(``Pc` zy~EU(dLl1$*2jN}=gAHB;N{~p*pZiC&@pZmqzJM-%yhGcKYlvpfMg~+Tg4}4cy^}Y z15WLQbnxyv{*+5y`$~|B< z$mPPbiprN*F5$S%Y{d4@*?G3o+O%C-{_-Tle1^wV|9n_XXM7dHF`o|xFTb47o{4>% z3~yV1HlnRVT8u~$-aIR(3e&(+bw`d8+ThaA-a zBR(xIJ?hWS5Q4zwG(NmGDGHqERGYnbM({HoX3S@*Cz{^sF$Cn==l0oHpllJNde!ZMR7J1@+7irD0BDT$~*5S@7!B?m*36g-Fqwd-c5F2 zenF5BdIaW6?>Ra-8#3e6|GMbp-o2IYzMFjao}tlszeu8=*&9{Ly(CAcqYuSjd~kC7 zDRV3J%jAs*HTbcU2)`K!dIADUCEhFo3IIed&!)m@xVB{JDWQu$c;gkvv%c}*#P=>4 zbG*ui0kv~Ak$*|=anEh2vEn>u! zz5EMhPeeoeB%W`L?xpKHuhnKlh617kLNku+c~)cwJ5ySkpe5!K&bCQ?`s%h zAUq3cKpG<6BV8qC&Mc#CP&Lsdj$3zhA_`(=Ek`pv1QFbrY~xIeMkb&f&R$RAiJQHb zKPD){%OAh|F-}4*<3GR|0Uu3R?dLJ*`2-o(oiJh!LbfZ$myI8t7Q>}ZeE6= z^4QZL^IUPvC=>1I52UX(5nwAc=J5;=$ZCyyq6u}BI4q8E2kmEzIG4wU@gVkk#vI$2 zPoOyrgAvyiR6RpQ$%(^o=_?CsP!I%qo-&8CKPSq_IrQmP`W)?I(s+n7p~t{zY_D59jmGw)rcPDLMoD9b)D~_(ECK-pd+iK-NpL7nnv##(kd8}zZo6M7~V*ETCjEd=S zt&_3Cg#f}yDSI}9 zfNACO$^c!L62>bCx$se2zXti~nb0>i(&n*Fx?5TE4`rf35K`Wqz}CXiLHA=@&c#|A z%U5POOH|(0XFpw8dWd*jq$`F%2GS*$Z_Th0$D4Q!Y(jZ!%y?{wYAT=TZPbai9O2Xf z_zV8Mq=#P$=P@7Px`Dq6l%Y)#XTTGH(>RXw`HV;~;tA6E=`^=7VhbGpON{S1h?E^| zh!g1y5yJprHL3S`LZ>xx)ICkwq853$q<52TCa^FPlBaLoU9~p9owSiZz^Oz+n2$z9 z@=P4l2x~AH7O;Q$Wz3-g&o%uOhb&(=nlkq{kX3AWN=7(oq8ggcVZo;cGtiqWveN-ZFT~sX_!t5URv2AQEB0 zI&y0P6%ym$1}CiP9s0qL^|Q6TPO>cwz=*KF!3Y}jn>3E`_7!bowGhV*Q6*{dNn+!H zClrtSOmAeU!YBl}U8zOus!Cl|V=Q?#92JmTI(JRM+NUE?*CeSC1L0)e zOSS{GFW3HSRAyKM`HB%Jd4dQ#ye?PBQ^>mjfhi0mkOA{fT{BKqLtgWRR$bn6GW%8E zKrb`lfSVOX(t*8_1}JG@gb^a6|K?+J8}nRWj&{jKBlxJ1T6x4A7Vk1V9@~lK$|jk~WCOcu-ag!x6&7M{)3B0y8W5 z*6PMOD~2Mn`h*M<*XYoRb`A9$Iz3-p@SZ#g*i7jUlLn#ENVxAr4Yfp*-`E>0gPM?EP%#wz< zT^1;mPI9t~{2X|h=MIJ}1F6r3>06~6B;LB%GV-?*B7W#kLtL?oWr_u+?$d%6Ljpt! z2bJPQq@BsutpD8jGGJ>fpPUs8^UE*Bpg}E6BV{q?e$pVk+yVXg&Hor8xZZf&*l8pL zQq%4iZg(GTH#VF2#|xe^tli1_#s(<7e>Pmfx&GykKYID&WWBll2>y0G?<=J2I?V1a zH^iL+{?;Gw6Q3?wZ*RArsLXJ}zzIMf=i|>g2M|`3LhT-ho5CuucN*Q6PETDQqvI=* z_5JNf4YA*5vAi>E2ToH5WaloDy`lgjM9&{GQ4n9YRlEbJe*Dl)yHGp+EG4L3D6&#D9J})FF-psOvKk?>!FqM$(Z#| zfIZlPAVb*N6Pbc#5G+QZ66Jx3_Ou(9gwE|5M6gGLVWtADP=@rV75`Y zsLsGbh_zl#cH5oq{_ghvey6d!+uGV{Cmh5zA#yGP3}Q7SJWRG4JL_%9tV%Umj9hmc zNWEAX^Ylrxv)N4I0p;Pk66BDL#WhZ~p1VX0q|P zwcSj%OorZSZ}0D{g9x@bY?&=PToJu@)6M2io85nnUXKlcyR|C9^Qz7bsov5KdxMg# zPMb|aw6@z_>7y*?+meZrt^NIVo<7^_w7UsyU`t@VO0Cx%-2$jxoVrK`;B}VkzCaTv zim-*N!ce$WDKN$WIu5%5C-UX|h-r292VLf*_%M9}?G!%|C>&}nO>QZ`i&Gq+dI}d= z_E_|uS5bm^k2xG%idK5MM$=fxDBoFhLHir8@Z^1#WqB)FTHZovXW@w@x3W=+5%nn7 zykgU)C3HBfp>3&vK}%yWMijo8W3;V=wub2WMm%7}@51!^oh%pys*5n}R$?))0hh~H z=kPwr&)5`}V1)t909}wl?>GPTjQvf%q9Z?M+6IKcO5yD?Cd18Qkun3^jhfNfk3QKe z-Yr%UUvx3WHH|DJ7E5Y1rr-drTZu<-JaNP$_iJ@Zj#*$Lee;);me*H>kgDDk!*8&v zm9?^gD{C^>|MYb;yAj7*FJ0J{jwB4|Pt^IPc8Nm6c|J#r?A9eAX|YnezBOf!5=s>* zHYfMj*4|!CyDASf0Zyg%#B5>8ks1xO7T!m5;Kteb`U>MhwJ5wC4MMh%`_Mx}h3FH= z){T7(ZK8CKQr#I;?NZzi^Q0Ej7g8!*Fe#g($Mmv ztm+6p8jW(#!4PEz2s|Ql*W8#M-r&+GgA|(Jw4nQUa-zxsS)V+p4;w6^R1=Aw3pPvZ zC^i^oRR*76I17YEA_v`^2@8U^K%piy8z{IEPeYYlk!@&lX`z5)VqjGbdP(M307GR*nY4)a zd2@~;Z!Ubv+DYHC&;s(i!%Flv2j$IA=SV3yQb;TEmW2&gM7p<;wwR$I<6;o2cn@!1 z-?gan>W9Il<)%5JxehuuJTJcpviVz3m1wPDx=RLdBAyJ5lqTgB1NjYo4MtLofHd~k z&Y7>J2r^PM!0bALh*J|pH5M?OJY#L<_3JClWTGp9(4npxfpRd6D$64M+BGezw>8qz zf!o?Nn^qWm@D3>6l_F8hRNE`Q3se(PjOkY>eoALwz*<2=qDB?5!StC-r367!5cvSe z;mlNIh8B$GSTEqvxIsgZY$(OFQ`FQn zrb;n8_Kl>c;&^YYL4e7TeC>P&yrw)ig4Y20XNg4gLK$!k6>w^CX=tO|XxeLgX6li}NZL_1rqUdBtQP+Qf3y>XgzJZ7VzzEK#U_ag7M^mn%Ifjo%AR zE#V`p3TO~QJ62cWeWTS}^9H+S4MZt`xt^h5v*B!a8Gd=H1DNQU>3e-*8$N&@CmQWPSWV4U% zs%{MpBZH#4L>Bv)?rO^I!2m%rfAS+&5hFl;-jyQO<+YyoPJ6NA!6Vz~WGbKpiv6}i z!LkWp1{H;pByss0NFPWk@w`o zL3OwMT>zZD2BkZ>lm3V;g~eD6GR-)NXtPTaInp~*;yJDsEZB;Km;InUGrj+2%nFnn zE*D$s@*>R4>RNo0#E)c%qy|f*hX{h5cNMCrSHaWOjyIRUa6)c_cCb$2d+?#Pj#vwEcYrimf4t4;mE{MBjaX?45K}}w zbkOPBX_69yj-WnT7J!N^39uj}vs1kM!{4-10Nx+;)D~)1Evyavru9+g+lb|`G9xDGVj#it0*Vi zA}AuW#2B_>r-9AL2GlMF4hgy?u1I?>o@dC#N=lEi;Twg%&sAN<_i4PqkU0KFZf zvg9_sH6JX`RZ&V15YhnVTgk{cF0%~OsLf{7@!YVXg>Ad%rr6|*m{;6W_$KHO;+0gv zE6Bp5!UC9^e6AH1#fRwQ>W!j6*E^xFi7es{@8W48z>xqiTWFGeVQ-ozw40n?KK!p5 zXhxhN1wU?{yqPQg4+NyUA_t!YWhbcwsOqQO#11J@F1|?QT9T}Hrmw^Q1*=qivq0Yc z0hwY)(+oy7)GQoCg@o`38$p>y8RNQ@<6`fpb|4}|w#_jE;3PBng^e0wdOi|5H8h|s zuymXw(wVI<(X>2e15BGqmb>vLiU3x=;!z{@mHm4CribI=>tL^F$TpI3-j^ddaC>e5bEaJ zdA$hS{fm`SK9lWO^iS@G88tMI1fD8qT+2c=Z2$JFx0Wmo%L@+_)IQH492eO{svw4lWVy9h;= zNg`3Pi_O6p(;U@H+9Y`mQjKhDQ&v$v!(G4Md`pCG`A$rM#McplQsnA6z`8Nz{2*}# z2_2$&^~>nh9l_cjcBD{`(wNCl2NlvKY7eNl7Y}PMC27Cwjs@X(N}iDV25;<+gDy`X za5wWJ3`t0UdLb0DfJMgkZ>Ag8S#<*()z^`P`9vu`owFDGqXQ-(IG;|DnCBoIh#i9r zcS16h7(^e2IK2gp4~)_mD`wogBfnM1`as?+8_I@;IM+J7_(67r>&&_D!x`cCI} zNT%VHE}1K|eK~xtJXK(6;R|U-UMbV9nPIAvl$+5cQeEv9oM8%P28dkBtJVHmh6*FB z^sIuC@qWlBOGFjj^wr&W8N6%NIR;)Y>rCS-C9_dHDR)dGK^x~1O`-wiQXng;%(Sc2_N=}HYBIvr>k?;hsEsdyPcW`R8Hv73SdOL;WkC^lE|qsm;0 zFI3qQZ0P>PcH7_f%62RE$b~H%#Smj1soI4U!8jkIu)I_JoqRrwFojsbUZQd&Dx|Y3~pAk_av}SfKiphSp#d+Su6>f+cI0%tbwFZfD}P>g7D`fkt3NRV&rsB;EF z96#W#(HVA0HWpg3j0LYt%UD^B>SKO=u=p1O_V@}|rLJRPVD%0y^w+TmDPSeaF0%(E( z7NiBF8R;EVLG4n2kry^SZb!(b!m4qQrANrHWMD9>TMj+xP!j>I!tRhoIiG}0ryvJ! zylknVfc$ZzVAi%1@<_>BVLo0rnlt;(7v+Q%X&cjKGt@>&{}$uMjHRXAN|ZH`*)6D! z5fD3Yhz3cwt#kSptt`7F3Y9BTNFIyM(Ho_c2oun#(ku;=N!kNzdNjNSXFMoSV!QHw zT*X&`S;&{6tx_F#ql(!_ZF>z>D+3u`2JLR>3!H7JGAkenL{MfVs55c%w$W)C#3M_= z8J&pb8GKGv+H^WMVR&79H7FM3>WQqF- zV@Wv$*%9g>Kka(Sf(uLDO@(&Qz;?5tyIrvH3-Wj)MJ%g=&R3GaWl4Tv9&ATPx*_i> zEX_`s?agXhz&XTTkg6LsOcdggnu)F64iP;nlq(;S&{h?cZ~fqx9`!2ew3}WVB@zl$ zs6#jwlt{%g^1?kZeTlAgO&q4+G(-_yrpR3q9?VOfs3DJ3(USYL*wsbG@?su7^C+Zx z9hHa*NlzCcWXCHG0}|U|lxk){Mt-0zbsyZ*7Oy;D0v7rY)K+`8+O6VA>JG37=vg~q zWw$Vz8h_3B#!Gx0u{Pj$tzWP3Ve z)>$HAro5-`REqpw+*@wMBDpW%Q2wVWX=R5)ffX@o$f^ZAB$fg5O* zD;Q`i*g@z$4qYN~1zYztxpBm;z^P5wv_g3s%{8&JGZN?>uSKs6$v}P;oyDaVGPNZgjSXNAKzqxzW5UsoAC7uYQ2p#!kIMx2=xM=6_ItKd0K%7Y!Js zzlHeBpII;G)kFTJrrM5JY@(&&x)WL%rL&oP3&`tRi>6L#QsLGWAcH`9)4H~5)fOI{ zZ7nMUYc6(w6W7)Au95ta)xC27`}Ji%*c`BkLMU2dr%h2M!kP#QKQ&qO36azUq1dG( z0G2#Epvfo(ar7OjE|7u+P9m~zI7J2wpCEPRSBa1V7J56#c6v?o-10SueuH)5S zV{ll6a)F1o-?hWe;HoE4$GZlEhe_z8t}1atzoLT}2xKng8u^nyB`w4Z>;l&+0$MQo zD#+GSRhf;-zAlOVPO4%I8}GsMsK1sl zR{9W*j)mUEk~HD5#zP4>1TXJg6K-OWs#mQ4uv;i+MD%$4m57y1pi?56Si_Ci=_A!~ zqE@q9>qdny3=V)DZ~-Sqa4xUC9p)ZjNPE;XPYn_e6mZ}9eWiyuDr&nmIfXgwH_E=S z)r^mD;%EqZk!QywuqFV{?%Xj;#O^CTpOv^d7~g59lj3Jb-i+w5DFcX4634l2`Zr}h zUJ$84)S{_%f%>|ydA~BpTDAexzXpI{TIDY(U~hHNxkks=BD)!1?)7W4Au9-Iga67M z!Xn+Q*hTP^iQh`BMWuf_y3k>5~Lg+)}5l zG^JV*Am7_Ff5QH53$#DAcC=X0<7KfA34CeE3x)_=d?`VTLlLY`U~kEXB?S^X*!d~C z+OI&{89$vYlc6u=^_`y#S^OIK@ZG|x$xOn|r8JECw)u@hGw0!Tz!cXnIg_0WdMf~s zN1DkfH2z|_g!B@-zLXx!y{D)P!j%Ps$?cjEput7rG0lR$iwKIS=w{ckif%%atd!F{m0>tcc1)_O z3#;@WMvZkXFR`G6Qm3iTn&E-88C(^|q<&3xfxbdy5tx12AGv7lYK2=J4no`NL4mi zEMiTrynGE7ib#pmeUIDC>+d6}ZTovYDx7|;td;MSD6po5uY)A{3~rP+&Rrkl~Mcd~1OOf`DupDc5|08~J#`f1Ax&;sx`CKfu6p zdTPQ!t%*LPLz;t)<5wat(f-E;?gVF~-cg{%1hGdsY%ud7`pQ>i+yU~Ekg$Q-e z{D9zh3I;HE&$Gq5b^>uE7(G6M!F9fK`mB5aWA$_k*?FlZeNq-PQW(M3y3fkL$x|rF zDhq7G%q-rZb2d+hkN5ZZ>k#0lqkYcs8#d$N_ITJleWt_#yJSlxu6IPhGMC8wcoD|S zr-vg4CX=0Ox8cuZv^(6PM0l>m$HwEW@pyQ|#TTmTDMzUB#>hE7#&n~^TS}lr{vTGW zKU)IwbjCTg%*GhbnSX~Qx??j~4r`v0d1D$myP9Lic;d-H>N&hcCsU-r7Oo3~6D|iI z5y;7##G(n7U^RwNR}&oc7GpnERR0$|3LE`Kr@{SY46VM6P>5cYJSH#ceqAJ?f}aN2 z?Uf!NRxcM__jov74}Lm5zxpNU!i^&c7E4bSvCfG&mu{6!w{$g9xiMwEo#h$6hYq9qyrUQm-L zP+;j(q5aa!Pv)c*sM(q#W)+DBm4euih=r~2GgPYeH=v!HON}(vl(q$=C0R>CiK-cW zCAawOCuo%w8IU68yK)sslCuZ2Ie?Ynfp+#rm|7Culkx$P>D@*&nktlb_ip^#ox$H$ zdMVS4%=XwiF$=7HsXyPN;A)RFf&C{32f@~m3~KS(@O0**_0ag0{^clblEsEJ zHwdB#8H%ero|B`~J#Hxt$2BNe|LHBKYVt=O7r0RrL?S*m9?QmX%f&krg&}8;Hj_#7 zY=7?w`4-0d@^qlo1&wSO{$qm%PN6n#R9hE6CkKPW8QHvN*G_up3r9LjbEuRz9CW-r zJlvw;IAQYl+vyzQJtK|99efu5_%r$VXp4u}D|1dHfst*%w@ye9 z31)<2s`^976_#7v@{v8{;V3g1qleHSrGVIXD1-K24|nn7fJr3mgGQI+Ofo1AP^9ef z%O0|D_!`-k-c^Q1N9Qax-b6n62=y}b1;5{Pt%7HzL_vej(XDC>oW6d7v~#|R#6c2N z4WOGi!>B8sCcTd{#9=5h+K|}^g9;~h1N4D~hz&<}N-K#J?vk6#BPpRT_7w|;O3sx6 ztyh-~V%C(MK&_0?Y_U1`+29i=r1~^?4RhFgFiB*%wMSR0?|?)Enopl3U20q-!^?>o zfrbq5G88;)N;m1cu>B3&@*L0 z(^4d4Wq!eNDk$vTJBnVg`+6dn3%thgS-O2hv&eQ3g_$G@+J>nP!Y{ReY04IDobvZ% zE;hg?KA;xqC18kaSc1I05rP96SKt{*3L0!9`HEyC7U?bfm2YfTLf7h)C-G7g9RXW)|d8(5{_u<4SZme;NQ1HkTJ-b2EJ51`$7V*oL_F5YkKFo<13WL9QCDxc;#E zupnpyW6IMSzHN6e+K0gHDGcPvmVs?lEGPzDr}-=j=4EybkPLq}`Q`;U8|ir8 z_2Xplq>nbrlv4+`ND%8=O3l4-`SQ&Sag&PU>cVH_x5^GX+!iP3KFK zUuk>J_%F3L)`aswS#AqMUuv?QD#?eCdtS1fhh90=j}yQ_nYbEHEF z0QVKGXe6KKoKM0dQ!wv2(^o!J7iuiO{Z~J?hrdJ3R0_LoCvo21I^23p_NZoif4qOZ zPtK^XkmATvg-R;!>?H-koBol#%QP7UzWw@?Y|XTak(gi4UqS#GjGIgBx!bo$W?<7g ztXw2uXGrd;o#8~u@^*OB9(wQ2XuLmpwy)pLN6qI8-5q`TY%5&^%n+;t?o@CD3Ds zLA*dsKSl^}I_VZT*qK5ZcV;)7`bN?}aWfyI5>Pi&O7Ji^287`)H(04=>`rB;@3#o( zsvXB=f8OaY^aZuhTasV1uYrd+K9rRMIunE{yQ9GGH5b)kF(Gm=-hVglrz~i25eh`I z;daD&mRv~mo9ROl4+erQtKDI8#&(VX{ve^+VcpDP^a+kjU)XMZIvvOK!ZF*Ia6R*- zo!dXm&R^bMziM`e+attJmgFv3-kuIIksb1NXZY2YJ}j2%^T`%T9w)lw>*P1z9UhLK zaYFo7rhMBS9uY3&%^Y91j>gUI=pAAXOD9`Qvresqy!b` z4tPpdS%_?nG(bXauP!+aw>R=omi9`k`}b<-AI8!aU#$REFI6`etZa50@2GU8=xRAu zYFpF08__)}h5=NRBeI;R5k@;SAO{X|{U+2VlnSMM;{w^2E^wi+w8P&Uj&nriS}Zg# z(y$TF(8r1Y2nmL(&@#xbXI@|D5R2XEA3P$b-bOZY;#4O!ikPXU7UAG02>K&FhdcXPz}gG@A8Es#Q1V~c7oxE&x`5Tm)byhTtm)uf!xTNM&x=)$@&E3 zeT6r~b`tUYf+j_~;}^aiO!zfME}W%gW9cn+uV7S0r22ZdEc1Fxlrf*I7dz#<*LJ}p z$dP*LOiLPI7B0GI{sd>axYTc2pQ$z*BVq|b7&{?>S7dtdRG`3r)$rHm94 z<@S8eGc0rc(JD^EwSJ110AE@@P90Zr!&?l)(6d|Z2ADfMotbXqIV4CTYGZvtTjk6$ zaZ5bpCBHhE6vK(}RyG+<0-h_MY+8~-i^5b`2ql}z@BxS?`V!XTIpQhFds!7J|H{@Y zo*jymlnb2MsPN>aN(8% zIz;dHs84q1jzJip&mu1OzU8Re+l!lT=U<f!a5=db}+*)2x2tvn@ckBitNf(w=-q16ug_Mcj}kHPhTy5+5SpH zc9!cniLQ%8TzL>!Q5Zo!&PI}J?2KGs_UUhLsI9DCPUxJH>YQ(+;E%totPu_dI5mU; zRzFz)Z;=Hc5P||^U((WvZ{R-FC#~gTNMJ9-O|*_OpbEi?!suSsnxJ`j)KH&uNJg7OWHqZY5H-qCVqCZVNSk-FGZQt$h*_Z5{YnCMVM9Oy%CG zJYev~%ZrC^(Tt|@%0S*jCs&n3(Ytrb>&vodwI5)Yp}@uvI&OG7FMJ6dMKhKR9wnYk z<=jwzZgco^`wOZ&hkheCDen)`Kgu*57-9<`!pl&={g>?SVn9kX$x5%#a81j6~k-7sRgH$UCK~pFJ11LKFXqp>Mm2b z28!AMxaRmrDkOtn795ov%Rd!=&X)>BZPn8)7GP{nk;K~3O4ID$=7x7e}~ z+Xhz`6lFR>k`(eK^o>f@h=x*vFQAE6z(&(RB4Hy_3MbvgZt8H{;jDap^_ zJ<1I52En~+)|%||vD{(s>mH}w>^;IFXYcq$9}S+v!dN57zYs&fFfE&pZ^~I*GEGCe zSk4qeNTMty9qcWyARE@@^LtNSzj}H7@bk6REgviJ?YG}j=}WS0J0Y_0P_Jr$H6Nc<^0xl-kl**hL?J)7(|2gB_+ zW)BqyuN(f3#&J*{STDFQR}PMb8`gM=pUy#OJ1?384jX8G!wDe=2OJB4MuV$BYEtv7 z=HN)D@g3|RPL7_UKOG#64k!Bqa{li(Qegb29N-q;*NdhUt-21HoHK!u6%XJD6S;6B zu^{9g)KbXufvle!M=*|!V(gz-WaZpk^b73kA*tT^iyR_FpU`a{wTV{Xsj|g0x%RN_ z=AAYKsCMAI%cF(4 zFL}pH(6B>%eI#T6X9=_fFsH~p2R6HQX)>H+8IEN4mbX14d_Fm};Ns%ujtn{ieoD`r z%jQ6WZwH_d>FH+1lO)VRlrte4;B*HZ*&tsz1!8I>W)EK?ypk8=QfXnPIAfm)zd$vC zKp0GEuaI^v>|psBOsFFpl>6^{od5`_)-b<9t$}Be-VqR>O+L>lZ)^^}|K~F<-(rrG z>`#g*$$HbkWs0+H!zslKMWtd=oAZQYW@RR-=IBE$PDweC!O8;p4n<`d6;-{9?S%Fy z0KUUq=dxLs2sEbjd>W~Y1>Pf-VCpx9z*|^=Qk{$}$Wb_@Rq_l+y%?Bg5*Mtd;hE+BQEV7i9UmLF+4)c5b!NT1;M3!&3RS1Qxot^46B})9rRN zJNhhi2SexT?UKs{V%EkknN4Q?X&yn?lWwL=DV-BcWgqSga(Ia#Wq}~EQtX((TFU{o zw1c?5+Je%NSVIVQv9BZr&@p&mbfDYG9LutLG%s?2Q2*<#Hq~ILQ>_n=)x%Ro*3GMpaRcHZuw2MV~3~$c7vgUs9i%sMKBvOTcX|(J~ z*~^N_#NH$P$Q!{&Dt&W3ciD4vR z3f9z*w!Mri#o+5vD9NKVZIEw;V})kr!)ONmW04mS|IPu-^6H|Wf~W2o<4R;6a&RDL z`P|Glis-rFTMV$!DESpIhcM1SXQwRat=_$c|u#RLLO-2}nBa&m4sIe!0@}@(5xD03*d0atB*eTBSszA|-?^AO{v1!hU!VOH@$-_Ei<< zH^u_?@w9c))t+W`>4^DqSdD3oWg+`S`Pwap|%rR{~#5n$ykZYj1?)FUJ*8P%wr ziVU1ty%a<2V>W`@lr(9=?5~{ic~r6k1qBeG3xul!-xQo1xMKIKFrg9p`$!*{gdHT5OKURVip?^Fe5r5GA&g3D#l-&a0 zj6N>}KK^=0K*x1SVNI5w+go&jnmwE%>RJ^JPZyocXPj}Zj3GM(ha36fvgzx!Q8x`4 z{x`kfjAD?*H0Jc~0!cHDry#2-HM+2c_nl zpd9FQ{$QvnWZxp0RVZ1YVlRDeTu<+m`_chqvQbJOPufM{);wXrzcmed*9<`kQ0{Sw z1gy{e??Oy0UAB{ZaEra+a&RbHAc5;qWSr3nfdmPJnI6Wbm0BZ~NMG<$$Y;UbC^t*6T zX+v3{t_ZelNt-3UV_mR(~5##u&aWwUkOX zx~PeasRi_lSDG(A69_?X8Lnq{XBHoEn7@-k0|Pgzz{1g?$mN&8xAu-Uq_W91$6?!B zRbaAd2X_`pGhzU-AueeB(nVv>Okf<=jhJm4Obv5AW)X3(EJr){S|UK&l}Lev84myn zI5bxy+A=XadVa)h2BX%CESx6c) zy2H3h?CR*`vbdLP6_i7fwf90qQ69P~)Kgw;m&q-xI<$xbrJyaPsn_kiHo z=I}MUX5cW4lV+dmLc|z|2!TArs3W}U03nCuW7=hhd3MuS+un!ckP#j7D7V7;JoKmym%daJ;qm<%oh5iD<|`PVt!ASCPGe{6qHk z(aHbI{$R4d`~81a(SyV9|J&Y|TL&YG96j0E0D+Zz3faI%f>y_)Lw>4Y#~p7xdhzA6 z5zc;-X1p~zJRA;oM)>pbWAEt@RF-c$c=T?}4mrw) zzd3Y3XZaa!Eu%3wF>Wm5!>xfFWcb!*Dj)7_ACbxfZ{e&XevI)t1YD*CUk!h^g-cCy zc*LR8Tg~`*wB^qiFLciIm^Ho_Y{O#}DKo$i1h>9>E*{S>zDDR(*{2Qw6E=tgk_ZK! zwNst>jzp(*cZvg01?lUxM}sRe>CJxqj|cjA^z(oEDa3Pr_UnHf>EqEa{)tL12D?+l zl1rxOzh4d}m*?OAPrdNq`uqQN@%8*_MiG`L2ei&O-5L9MG56iviEigF?R)k@cvp?5 zw+b=C6uJ;O2Xn!YM)?R511zF+BLx6uUU6wtE=GH=TDH029uZR@D zW{^e7K|lH-ISOfyuUQa{@b)7Z0X|*|*I>WMe>Li5D~e_e@jL>QE3d4-t`uuiV6lfA zf^V`UE*WxWT7Qpn=7$i$`+RHbYoed?88ET~cOirX$3YAsMP}+K?NWopnGx6M4zrqS zD*7$%6$)*V(t+nF;1Q2Xlr*>y0w>a`Y7iJCKWMa&Zv7JeC47nAhG$e;iw$IW-66zv zAK?k!W*@79t%wH+nCr9>YVL_Ly=`a;_}J3)pM zCg`=?F6H4J!q0KR4T1|<+LPa4UM>@wKf|-3-j#+d;$7+}lUWD7-e_4|fE3m*QJiXl zl>XYf5Wsy(iGT%RYNNt>!(bow=3*7sZNMu{by%?_&4Q~as{k880yH3%EOLsylWY}C zib-o<0t^Ou;h;@bl^K+gDkXq0j-4}A92Ug-v0N;6D_%y;9`A148}eH{iSkl_^n~RVgiMz5nhuF)-m>30dLM3RbL!3(MI~L7vc#pN08u`+^_Fg#-YSbN z8DRF?>7@_>)N^(Xpg+-lT2i&?1aI=QI*!H4$WAinvxvWL2b3ke&^b``rA9`w1q-S1 z%aa)j6ryf@rmTsNZ%C$w9U)g7YodJ-6sy{`mTRON>^s?C6s=hKZYK=9Hi)$bS;3(% zuLxg@fvK0IBYFw3u^gEjWlH2HgDselwY{2^xm4yV&lu%!a?!|lpny%pvY@nLeLc-b z(oI>s9_xe`y!GK~dldTL91ba6mRnD*@1T;3&Kmzg*bOKz7QcuMA2UAOXhAmk2d z-0d4XFt2IB5_VlT9g9@=*y|YH7ve@lNTv048MhywJlCrudF#ux$V%srRlAfC5!7CYl+JYjA)keV!m6@ ztOeWs8%D0~(v=tm$me)dB`DGq$LVlTs7#t1cj>QJu2`PTnHxbS&!%=pW5U|rs2tPf z(Ps+F8WKln&&28;p50PZ5tFt!bUo-3_Qt_+P)!MRrucb>y@BeiAxMH{fU1Cu%Cb>A z>}D~tc2bnt2U4a(&|P)zBr4M36sN@WYfLTadB3LhbFM=&l-x~;g|qHjTUm0Y6P-#m z_%SdVtHE*Ah9Ld$L(qxy*`q;vC70Eo)(vPGMy^|@mnLJ4q721JfY5N&anxveAemVf zMjil!lMEo~OKe7eeaac+TG0oo;Iv_%jFp_TLk;< z?S}^k50Cjz@8v5O^s5e9FLJt5WsZ%!bFCsAjUN(O3N72Pd`EM-G1sbHf)_l|a)U(d z$Wvhp36XI9^6jj}d?3Q0+uZm5pZ{WmEgdH?7e9u-d!*3L^H25iU;Mk3+rRi3_i<>* z^^t3H&8A?LzjrxP;Nm4}&*j3jMCrvZ?iU5Rsl!-3LB1@FgjgW%u_6zM=8KfE8zee} zjWl(Ilx8~X9DXjE(&sG}+TVyF37UZc=rP#zd&+tL%iIQC;Xy~(E3J;#;m|n!Jc5;ZIJ9C2dmP%FJj~!e< zNY^p`6|?$m0I;aNdzGf zXS>)P#iq_Z?m9XMBx1R>o$aHYrKfVVY^r+;vWTD*@6hy053F~@%po(FbEQ&jTVMSw zZG2KyOw2;$K{RizaMGz@xVh=Q6s!zGmT&s?r=4y9rxdwE9E0Iqq8^uyyEQT?a=S-~ zyT#Lgns#pDwLN(FdHn5HIw&BF`t=%Y>x9=?*B6bj+nQgB=}$vpB%uh7*%eJh!FiZT z(T0$$@Q^1!3jKi9KD|L-D3HLN2ObJpDGktRue610!J% z@z78~3}qN$U;_dX!*c8@Ov#)99nTikFrT$=kM&S%(~uiE!U4Q&OnO6q`G3tBB%zK? z2L*9SCMs{b^m8>fwrcQfEm^5*wHYR7h^# zWhWN~Qq~VWh^Z|23lcYzll~}zY>XOsdoc~tzfx2z1gt=cVRy>G$MPE|qL;3)Sh48y zKZ75Mb75VBRr6c|i7715>{u%@P+E}TXvVVgON*(rqpKl=~)0N#qh^&^3+hCZ4U*~oh=JnHa5mQ{0Wd$Bg_&B1%pawF!IH4nRqkk>N`T2*S2ERZ|P?= z%OJG(IUsQcUA7Z&YNF-)%$SM)yMSXQbq+Y!+Uk1HSUDtE3xO5S`!ugb_z+%C(2$;%`2H<(^v8#_tw)UQtgD5pz16lYstu~Dm1!s&$UMmesS3-q_kr`=W>R=M zK#Slg(O)0Fr<9sC5#&ZCCNv<>7L#CDVi7lCg%fB#6kqECl89JBcA*^?lTlU%rYYtd zMY*$OxSpQn#f>_P<_1g48Slfi*eNgQq*Gaa$7-dJeLFSW^K_f0am-4V*P+dU2P+3% zBHw3Vj`qC*OSPrxckuo?T-rl&;rF#4uz~abiuNSm+&N-LCPG zbp?B;nmNQew0AJ@7(*t(rcAbcUUGh!qLoK=vP_6x*6>{kn>$W9w9&|kz^JspCbmPI z&;h~!+H5Eq-tbWHH(Pv!Nl5T#=oGn-B_x|zqbx``2`X-IvedQU zWtjv)1IUyK#3v`+hgUP6-C>{>QX(TD^iYl%$dr1bW(hqxlK0Rd%DMMf%v_c*v6I=+iRKafZ8i5i~)=A2^9(if)# z^HC->aVQXr^4kF@;k*f)GgTIxF+;9ID98h%2RMEpslPnS{jOe{7z7jmfI~k8F4Pcw4-pNl}Ces&eDJ-Cl(R; zYCBnahzSB_@jLJYG;omaOEMnubnD$pDeEM;N}UKwYl!j)tO+W$`^NDZ-cXamml6#x$>Ez6?Xf z;_fy2CU28g)ZqcGg)|?bwS#_|mxa9zWA~Jn`c>+g68dNvNu2jOp+X_B8uiSzaAkjA zLBxZbEB0r}u^^cA^5UEME7Jbrm?rypWmeK-ECr^4#d+3XGXm3#YQtiR+^94m*?5=Z zcf8m(n=#=zI}j^&drCI#x0q`-cit)&kOzUySTlHq5Q})@C60ZPDZ}|iQb@!;D4U5; zf3X8Rayf;NKkVM>x)MK;ca`ZG&ZwJG0xc{DhqQdfTm`nm4!eSb#QH%CAXRUeHd*CF zNofQbZ~L%m)b?*^{aftddSf4%o%TATzMX=Hj*#FFIRrgpJRM)qP467*Y+;Q+ z0W}qh>kp|?H4dzE$%`GXrJ^pA&-uqfosDW3ASqvgPNF!;bVm=+=rS@k%9&X+yV9)& zaY<(@Ir^(DA$07%``UN(N6DEwLACDBn%dTv2D~CU$@z5Y0Tt#bYnDUl3?`x_^vee7hyPX42RAaiF~myCfDFN)LBzc8Vxt;f;mbMx)}y#-ZMj{T3laY#0;pM#MEN z{M+dt6^7RwGDP@;#RoJu(#nkA;?BX68hitzd?ja+ImfIOegxTQN&zD6?&MlB8E$=r zzu;u3bHGY$IvEOajl>~v@@!~#!O8y9{boWALN4J-xb`;pNHGKxHmd)=;Y{lxN`(k?`EgQ_ku0kzXs)RGgdc433w5jGMUch*k@0v_)h0C zMbu=f^Px(Nx&nNSoi`JigXCR`c#_e}6SlF^XakkNp0sz#v&&oX44lY_c7syEw?B{} zC4`#tfnp-UP<}mX9IU+>fz0Tv~;gN-)veD&tQ%4GDd(#saXb0&L9*Egg^QJOG#m3p&6}H zaeLB$tXzaz;*k&MDnZF&B{i*r_}klC&f{YOP7!comlu&^3XLdMobYrSJRk4x4Gu|R zFxX(^2{1$GTg=6it|B@mg7@JEwjvY$ES_8a?jlAFha(hskI?MmOo3`_Y;n9bPItjI z)k;Ag+CxfhfBgmrF{452J@|-9$iTWxKP*EE98_8uG6&HQVk#D_5_v=zDGaEPHhBUT zUy)`X!4u4{>@jAT=yt#9$gi>LC6t!c;OIV^XuR&m`0$he~t3_`v0|E}0y3K** zk$Xa~->=GScBxMiJ+YugY{*t-dko?Iwd%D<2q)I!(!vu@J|V&qraD3N6Tr}hU@|wB zV!&#}N?7=ckt>>>I>90rs?`$DVDs1DSKWP6(2yUsbGpn8JqEre(Zr449F#mK=gg~o zOxb7rzLF^KLQ(Y-5fx%=}SgX)1o_{Tgh%Eh) zT0qxWuW1!NXLiWcEB7fTi>bjX^9=7t&Re*ob;yo1EgN6T%obnRaaOS-OygVAKaw6> zs3v|P*fYNwF6YnD`Kd)@wTq3EF#w!0nh;_4esFI8^L!p(=%xp|g)FD3Vrohf!LDZ3 zFU*|M&Gvp>e%OFMzS*8GWVwhqBJ^^`-LyR}EqscART?^#K8u1Cf*diIEfQZx(z1M4 z{2;kii7ZXj{+_ZeVJfY%qNUj?145sj{(UkJC8#rpesk3xXlG9fDm^RPkFk#4)qa`B z@tzRoqhn-H$!=S3VxmRYWgaw=z?R|nkM8V#Ikz@R7w<5f@?D3`R#joBQmoG-Y*o1i zmh5zYvmCPbHyamZd%~nDmq-mggb;76WPHj~sU1^b1eK_MKXkTz83mA%7}&kwaqXSI zS~J>L)R%ALiHE^mt4?vL^=FMEherhrx9AT^`iOR%_e(+fqV%I%1`fPnB`Efdv zey8^r&8M#kFp>{GzIhPy6?3Ga$u_i|eXpv5nR?AKuM%BWD>ez0qKtqdoQpx?uZ_@U zQwew@VL9|gk|D*AnS$wc1Wd9WuxI7UW6B9b@N3(h`NiPCcQVChV1N(yw;y=HTwBJ-E0# zC6fpuf`{VS!~?Q2Il!kgWrwA+Ha-lN(!-$Uqt z?`p@|QD0PeUK)CLG)+q0Rafm(K3^V2wZt1gt6^a7tz~VC;Eec+rHa~F6!%v3x zM-|Xpw$UZ4#*QHrscRJCppJo~YB0M3R*nvLjb2I5Nkpr*K-M|6pe(-kD$A~5)+OiB z5F0Zkjvxzauh{&?fr7CczMZ`!F$`xld$>bVw!(|x_Q_<)kn<^V<|I(TE{01^_j~`4 znNFd1ozuNsWH~&bA-_L^Mcy%xC`HkGJ+g`jY21&ToRMxOq=(q(jGd;X0%{S8fa^WS z%7L%L?eAdIoc)8J=$qN#6VlsU-wnn}o%`z3kjfY`hVDUt>S^4mQ~6-y>K5O{I8c+5 zV3_XZ)ObiS-(ohon#t{mGrS+_*F(SQA22-dCJ9E@uV#y1Klq22#A=^D7;xzCH+*~b z>j$%o2cMH|z!*vCO|)4w`V^#JgU@#RWOnh2Cos6&%s(Cc^m~*vmtRFz=fQVr?cY z2&9S=sag{b|DuhQ^}?TEn*i)p_5xP5qY zxE-i~4$dHxwNf}8Z6A{EW!Marhh?<8#W952M|*o54fNvK6AX%8K*l?&2#|6D;j(+!eR7{*l9Q{NVnWNKd+93}Cz|LR%Z1A(6{cP})`1SL@ zE4huz$DsP}<%N&)i#GzT&fh%*x!Jxt+rS-Leh5lAf@3YGAQHo;ynA$hpK;g*Tczvn4uyP*9ZI z*_yNq2F9WGi57a1U4yiYymM_+}qNup4vu%bSkV6njPSx;jiA5#l z0js2~UC;-Typ50!ldRRrl{A|Jg;7WGyNj0m+qEsRhc*;H5^G1-?j56*=@Ha@S}+ir zWf4JUo!St_M#EFt9(|S%u-nNEo@tKS1Kc~8(=El`dCDFW8BM!S+AL=OJfUm-J4ler zPRYH>w+{N{+Y`n+#X$Mwo7lNx=bZqd@croRcqZnwjD*pk=7@o9j{f+P%rd5k$HTp& z;pC_}<|x%|9Zsg4b)(-Mallz~%u%M~YHA*HP~>EbJWyNX(S-C?8OBb+Ge!- zgBZqdbVgiKJ2Hlv5w$=n%GUyo|$ZSzhnk5JPtkUjReK=|kkO#V2Z8 z68md!ePBZ#$!`Z!k%d?AM8)r+|BZp2cx020eaqFm}vdEB%B{)YZ_9D2a}hc+-U~gcnxVUo&8bG zusVvAV$Y{C>F;hu$_~Odpd&g{9m*?)IKTWTxnYmqmb4{h=Dbj31Qh+TW=`|l&CI%v z!2wU`EcU(W)eRQIsTTG&i?)OR=DO;=b57h@cae9>bH)apmD|BmqpJv%h7cO~*^h0` zd%oVg9G=-?_hot8T)DV?eF@4T{}nv5VrTUyT&p`M(n@!F<8jX%2pstrn}S?GISy$m z?n6A=TOBhbi$8n(;ZJWiUrjjy^Wv2vDrALUK0e6}v7pF)kT4UwPFpSGpR#1sY$4TQC~A8Zm)e>wV+{(qyA{aq6nup_uK;Euqrs(PZ7e}M*Agq3hO z`>bO&2U&w!pOsS$c(9!5^Jc13^E%db#D>km$mW9fa(xRnpSM;6Rz>%r3JAt>=OIMDjkS;= zIbW@;SauAko)mW0E4OoYeZV1N2tf>JV)bc3<}x>?fGVLzSoVc8qA)HR1woxMuv4rQ zFYHUoWqA)~3o4RLF)>J}(4%-1Bw5CMi$@p{8S1sK@EfwdJ&vOHtZS3xlYD?$`B#A% z66vpd!tbaJea~L!D}K0mw?VBa_wL5mmXy{D|HUo8Km5~E5H>Jy#=lc%7<+8r6IA~3 z%}2}6)kV|_T_vg`))O*kF&ViQl)<@jqe>dMueM-P^z=tR%n61c^t8{th4_`_)f=lF zQ%D(Jiocn5=11UUY3OK=cnoMakZM+n^ce`a{jlxkC$SQp+}$cZA2D(ojY-%0W2vSx zE3ADGVpCoz$h5YVx;3#T)xIp8v7Yl%h1~E54x(le+3LF~eE5!;;|SGIcROAq>(aI_ z7s)lnlR_9HHiBll%R;^3+hgbh0~5mElBX<1lsv433_vD>muK!EEXuA-fj%xx3+V=OCg|+8?hp2<*nvcx1&zCV89C50f9#el~l308e0K7zSH2aoCHE6*^P#D4i^nm?lMpSJHp_EIIQc)6b>vUy#jUu%3o;)Ys^#J&UUo}G! z8UD0OlA7@9y7!^t&}y{=!4i2jezyx8{>eRLLAiL!m7IuV`IA=nl-~QOiV0o~L7A-K z!CfJ+(@9V&x^!|AG_^T0C31r4-TJJjv+LZzQck}a?)0f|JR_8m)b*>Mt&hYiSn4KXq zFh=YV`Tt?B_yJvboupVe?B@ULXB}rIA5PS7DY20#F65S_s!#pg7tb#aLW= z4BFs#OSfpB(X5CKLDiiCryTHgGsV0NsltTNaV8@m5ep#6$I#NIO}bkkem2G7^po%Z z^l9mC(+&a(z}0P2sD&7+30GY0e)pAI(r84GxWV}psPvNhJ&F(?Svd0|UN)=mT+mWw zdB-PS0pX2I2LjoJT|*{H({a;dKDuJ>qG3aXNLxN2)FOl>6bd`9fM^9=Y8`i+B^>j+ z*}#u8eY{_+CI_CuWX#Q%@ZXj4+u*;0C(0)`^M@NOf=`==O~;i%izV3Dqoz#OZ1HG- zAvFSP7Y%Vm!6!BPe2?nTnDnEl{Qhb+szwEN;sYfUmIIZh!uvb7lt9Fg&(e*J+7=Z~ z+qDuMw!fVLV!7TZI#{YVLT?&<=p+cQL1rXaF-y;ewf4F!6pMx}MJQ!E5KG%iQ(Z2# zE3kOeENR20ASx>2 zf`}lXXhlE}H$X($iU^213Mwe5poroE?%V(UIp?`|?j)h$_x1bFt2gg^)_eBzoadZ- z`_nzQy&~W@Wt$*47`7b{1oO8Ig7ap}HV8H@41#^&2;3RI7w!VDG5ed%{ysPX`)|VO z@JYBm+-^}2OoThbJ>mYwW8mJHPcd^hJP7kzcp$t8D%`bD&$|gW!aLy(@Oh~8zGUW! zEkUpp^IlNyXTzP~S~C~nc9=K9z2F6A{{geV+W0Z!4aQrb((!rtU3d@N8oqCF5bO#s zhkD+}q2j$6>bdtAABHNo??L7NXK;J?C#dj$hr7caPxbK}0C&VZ$#^tWd~@KT@MO3H zJQFH>8Y=!WR65@R^_)wg>f@tO@!bq}gI|Cux6M%go`Fiw%Wxa`4|oXt4-DbKOT7P+ z;UvtboB2E_|5rh!<65ZrZh@-Td*M|0INT5Z%eZ%|H&2I3-y*1ZI^cG&+qfDk9c$pW z@O-FrUIh1m?}Q5f5x4`q0qzJt0~Oz$Q2y^W_Xps)I!XQ9gd*HHfdZsvbO#k=cL zU#g!_Tl~B*W z8LE801m*8hsPujZD&D7!&l`Ua74C0P<*|L6_rD)hIUETYQi2np($fuC(*GAIe>=AObnOk*Zzn^An`WE^ zRW40X^)MeQoy(!ZuZHS388cU57v>A0+Rfuo@jVHZzGtDrzW^2P6{vFAcDXO7eT+vy zrF#~Xzj<(1xCH9CtDx$q&&xE%K<1(^R0Rqto@wkimZ0K4AG&&kYFC#*rSpSuPk234_%A~FyB8{d-+;Tr zr=jxql9{(Y-TT`MDxHTx<+A~*ycQUjntc~k`|gK&?s}+j7eGDtQg|S|5-NS4hbo6J z8SjPi_YhQizY7)LFQK0Ml9{(T!-v}iDjj=6rT<{FZ-6R~W1*gZ0#v=63ipF&!NXt` z>N!_H$s0GqgW%Vp>h%{;;r;=qz}?UE=HsE#(+=MWd*L+rTPT0~oaN=Wlc3Tu2$kO= z)VMrs_9Mm%pvvK`Q04Y6v%eB5{ntR%%gyircn_4nC!x~+oVouEsvLGc+n4hpP~|rd z%6g)llu^CaCA#4wcRa%=`#c`hEx%?=PXA^EcU1Pl7>~Da| z$8Avgyxr`-X7=BLO6TKH;h%$QcfWy3&!3_4yThBjd2gt4m;%*)W*e76h3|zbzkV~X zgL-}esvN6O@m*|uKa~A-Q1x>wRJ*$qD*o?7)$@x`&)qKN^SuXDxC5ZZ@oC2CP~|og zD*eYpl~XI!b5Dcve>RlAUa0hC;lZ!~RUel^`M=uCpMuKY?NI6XGE}?|L6z6HpyK@z zR6RWn70>hL{)+Lx=02gs&&A7GpU)j#GyJ#Q&gdRD@1;cBRGXG4`&7OG!tgevz-;DPW1Fod^4<^Nky z{-1z)-t%UD+1$5Y>(ez6%6$*0etalY{mq7p;2U5Ad>cF*egPfiILF>gg1y^mRg&&soMSRQRfy z-vSl>QnUY%*8=>NTJCy&=nf+Z*`T06L3_fn=SD?ykt93qKd&8YD9|pI9M?s~d0V5*&=Pow)9;or>bg2GPfod=Bf{N#AsPNaB`=_AF=c`cV`#mWCKZWx55>&hRE7Z6< zanQ$mFx2=n8_Hh?RC&A+D!zVrJUq|LUxdo{BXA=8Aym2i94gsO)j{UB64kDL3` z#utr$H|{Xx>uDdT_7pah`9I747gNpBs@DjKVcEFb*Q(~~N=)-*iy7p-1yP)Fvx|yFg z_ZQ&|g@-ENBi4I=4G2Jp&c*^XC3XsPt}C@%?X4D1XzTo--Tn37etv z*#i~-8BqTE%$$X;oS^)j1C{Ozq0)UB+zVb~{4A8e2hIEqsP^_VsC>K#Ri1w^^FN@{ z{a>i(PN>pG;qI^nreQO@8J-G%3+3 zbG-ZRQ1<&l#eW1;I*)-GFK0nLXE{`R=!S}aEtLQDQ0;BR?B5CZ!2Cfd|2IIzcNbLo z-wPGrV^HnyyHM%-IaEIX2sK}Ccdn23D5&^OfXd%8sQCJz(vgK7umY8y2O&)$c+AWT z&hz!N6e>SGP~q1@`QHE)|C`|;d_PqB{%zd)d_NEE09&!22PlAWM+1sBEm5z5n)z4LMGW@uiABL{H;DOlx9PSVQ4OOoD zzQxz)5m4oFG*tfPLgn{lsC+Fn^AaezZ8=mwJiP4a^0yc&-c@Fwg2$530^Aq-O>gz> z3V}Gc89Rat44N&cUj@h4T_NN(F8P78I zLD$~lqlBwK)!+Pg`0`i)m7dd}%6B!?^K!;vsC>T#>bW0+itlEq^1B@#3?GGRPrrgY zz*nI9=fBK;;w64u+#ha_eKSgTS3#BY^-%rd3-CDjC{#Ucb*Z=C9V-5* zQ1Q)$3jYQue@o1M71TK1Yb?PNF<%6ChWD8LH=x4*#P|!ScwdBi&R>k%zQ@<&o>2Dt zL6ys7sPb-vDwp{%go~l-r5~z%-V9ZbS3s4^O>k#;8&o`BF@DYXEvSC{1XQ`a3{{TX zUFP$(8&o+R26utSLAft7E{AIWZ!}h+()j^%{{&RKycMcmKM$3jJD}3D8LAu}Gy5l? z((_BG^aStq<-I3VznugX?nq+;+zs<_P~*>HsPwLdYRBh8mCu#N+u$0^Ux%uXsqgdg z&44P`c~JSAZ)}CTV(x~!!Ct8JmZ1Ef57nM8hDz_1P~~(JR6X1Y7492Q?eQm2`TGNu z|DE6O<2e*6p2<+@ooDu)@CeMS;NkFGsQK$UsQle&{4P{}UW7{j%WyLMH`H^F_<+yH zJg9bYs+rrN@^L1Vzdoq)-3TYb3!&nD4^;VH0r!NrL#5+kGd~OGV15Ovey3gT>tQZD z1aq62*Fm{o2-PkwgL}ctq4M)7cqqIdD&NnT{k9+U^Z%jnSnOM%%IO@a{CohaoIebe z{u`mj(a*u%;bV{~DR>%Q1beUW^6+!8iur^OQO58#sPye{C259x!xT(Gyat=$S#b4- z84KZ^#=WjWCc<2RE8(x;>F|`Ry?lKYRQWv%8{k$S@$F~^R5>>p7sCTFcR{tIA*l9z zF5C-#0ID6_09AgEK;`#aQ1$o(RQ>-Hs=xgjDxTlMJ>fs#esGs-e0!J-_r`oIl)qM} z=d6PAKM41M7r-g-gHY+c8|wLAhkE{FP|yDXRCzxIC&AxA)yrhI>h-6y>J{!ryS6DmIo%)S>YpXWf8$7N9Ua}5mP z=it`xdr;~60aSVZ7^=KqfC~2)xDDKvOv}8ZabM$+Q0bfv4}eRd@{xvWpEO+3)yC?|%=daz7BN9Z!PW!P&-n zQ006IRQ#tw#eX_fy7T6K2~@lJ2voYh2vz;LC4&xGlz=pwhJ~R6h5I zs+XzI^<$`V>NNWScr@m7pxW6dq2m80l)v9WwU6yS<=frvQ1vhcD*Z=8rEd;Ydu@i> z!!ymk56b^~sB~4K!o3+PKbJt|{|2aX{W4U&KLnMZ??dI|NvQC@f~v1Sn)_Ba`f%Gr zrDIR1^oGV`;EtG&gUbJWGp~fIpEXe7icszF0;qIc2$hcanE7hBBjy{R!rf-P4=R1% zH9iA(#Qb}x`urPo>AK06X9(5L=b3p0)bobmR5${6g4aXk|I<*<`z%yE_d|^X--h!4 z98~%4aK3mjI0&lzmO!Qd zG^lz@!HICA@nWcSz7MLMe%Sa~sDAS>TmqkkDyO4w_48sET#R`Hs-53wd5~%!s1S;I8pvw14Q1j(xqEJ?8#1sCa%4m9M|SL*Wje_w_mjDqZbR`8orJFb_4(ycf#- zR;cp38%~2yK$UCo1s`rA)bkI8C&A;Po>PG;m&>8*>1L>MyAQhd29@t;;a>11xI5hX zi$4CnpwfRRJPJ;QO3!If;ntXY&RB&imkZ#Y@G`guydEmt7mW8q^|Nooz2W0f{$7A8 zr+-4_Z^G@K`#{-;#u>&_pu)97o_G569RZc!c~JGx0;j_iboqqqF<%c?!o9xa<@j|_<@zvGIX(py{y8`aZgrQ% z4`n|O&V)Ts_4GD#e-CWJ{BfxIeHyBr9{6S7Uyp?QV?GJaf-8*gfO_s-Q0?>qsCXZS zQ{Z=?%H^+6@oj&%&(H2q;f^r#bmM%edg+3yzq6p??S)Nn03HiJ0p;&WsQ7;YRo;Ix zZv7SC9`=MvPYC6InwjT7)!&Iw<=zJMywyt4^X4L`c6Bb)b8dlh{}UX9)9&~A{2)|2`WRF??}93y`=QeRkl8;D^_-`m z>Sx*mKD~3H@_!;!Iu}E=s})e?w+1TS5>&aIW4zGpFM)ew|30X2pM;A4Hn<=BikTmW zD&J?J{QU;1{9iHm?KXS&J)!!;K~VMB4iAT`;bHJRsCIb`)Hrzy)OfNPsvLe`?k_== z!+)Tjx6Ok-AG^Q%OJD;WfQs)!Q0?SKsC+yKRX$Ha#rGmy1^*0{ulBF` z{gahY>Au1Ec^G282P)jp;CAo@sQmvPE``BEKE2DJ+&iJldnG&)o(0vOE`kTc>*0a$ z9<%?E+5Zh5hy6ZZ_wq#>RC~M_s=Pi2<^C{KeE)??@1YNS9u3t#kAuor2`c~RLZ#z! zI2C>gs-B;L+r!_P`4y=6wtB?pcNZx4{mgtQ+y?VBsCt+Vw}y+M{Ix=b?}Uo~OsMvm zg*(BD@dBv)UjkK+pMV;-zXH`hzGLpsnEOAW#+AJv_4zp(s(mkj3cmvCxp^pm=fJI? zem9W72Cgq*@fWjHne4#*YS_Vb9rr)ux|HiD_&tJ5o{PPHyD7u`KI;)Y2mgw{v&?)x z{@;T63V0)z%K3TBJ=`C~{d>*d*D?PV`$J*$`wRCPkCMOT=KdM@Asjwv<{uOGPOh(W zeF^(r%|03S0~mf|_D8|X?7m7E{m$n4mF~^_0eGMJIRT!*HGti*=6;TGBK$tVZicsT zZO8RT%=&4Z)9?M*>GvKkjVbGh>jzvfa%rymFN}VBa{u>)`4aBWBK$_Klkk+ne1y4w z7XAghUEt54+V4;C$J7w4f|qmA4c)m1_30Zhui(<}ty~v#y-fyw+hcz)^*N3ECgNL; zd8$3<5bRUftNk5_-7mS+#`U`$e;?#(;5rBUM!1&iXxtWIevJETxIV=-iFm#NFT?G6 z1-9Rg`1>4JGv-flF$D#a@p~k8`u*M`c%PYNJeBM7Tve|5*r$m1hg|yg8Pf^>dvpJ! zcMi6~U1QX)JmVJl6mI{lL;PR5RI7@UXs=a@eN^_$53Zg#J}TETp^nYZTtLA(DhZkrT< z-yqj!+@^DVj{DEUVf+otk>8OP#+w+|?B=WZ)4OM7Grt*LZuh@33M=uapT?38SzMEi z$6)t7?l;K;zmV$&-SB$?`-|YOE&LPQ|5gtCo=&7`Z_=ROwOkKje-zgU_w%@NT$2d@ zJFXdA)40BaoqkVqmGHXf8mz4`_s5T1G_(CzTLTUZ#*8mspjvG_|tErM{oz`%W&J%++W20c&>MHy`O6> z?tii{|AxOdf46f#h5Mi2XEQvAbm`Y>es%wE{o!{g?$a#XPPlL2elM;O?q5#$|Caet zm>0R9-AT-{b!8-WUvG-Wl_3bMMFg3GAMS515}{Vvc?faU*%54ZGtA z^AQUdxo_s?N$m1)9e(};Cvr*F`SK{gSDCqBdg#F|7x?nce=F z_1lYZC;Qvrd$0xj3Fap2UvU2}!W6mR9rkm5n(Jd+`dtgJfV<-FQnM>_e*$)kF|XwQ z&+u`~k8r;?*H^e^aeV>1ZFqi&`{i73!%n}mxc??s@^>eOSFrm6*GlfcW$s%O{wIXH z+dQv_J8=ET;@SisH^09#KfQ2wE3dn7-;etec8FuaKg{pjxj&Kn>A2s|^=r)Ufcm`* zx3&BC8TYYp9q?cH`4apt*Ad+Rlk3CWZ_o90?pp~nz`cH7_6WXV=3ipI7k4G^_i%~D zFK=tPKFRea>~7_1Bg`EMclnvbb)#i0F{JF)u{=EpD}%k>7X1(*xiZwH$(zn4qD zFB&hzZ9Uf-F8!Xy{xfhVGk+Oousa4?kl+{Gyoc)`{2j{m7ViHB--w?-alL_i{SL-H z`t8ZhLAdF+GuL;_?OAw@-7m)e-P|vNC*b$nTp6xAFweKJ+`4t@m6$)w^;xbdgn0`4 zN4fu}#q~J%`rU^4PP1DIzkvNoW**}HYVL34y1?ud=BIYQ+TsX}a(l1c4<`KI!~K7- zzng1E+Sx1k`v>>uat(3+IrtUxe+&FkBCO(Eqd$q?_wc_v*F60F82euC59iWv2F!CU z^TyzGi|e<>XU$%CjOz#ZJsG$6bDd^xUEF_5_wetye+d2&J_A3>HOzIWIv>CDxIT}Y zeg&=-ruG6tQ2VNr!e%E4tl54s* z1|Nf;Ak1v+I=S?l%QeFNAGjXm{tad?x2^E|Fy&&lQ{>J@F@D#335M~1A_sN0Zx!fNMU*`HKS10B-!NvHynCmUv>vuKRo>oUPUyr}9 z;(i!*o4EfN_xD5nw&wnP_*OW>_F1?PyPM$GxRzn3-;LadJnxI#f13M4xT4<+-0YDs|Bd@+%zOo0 zMI8NRKGov;fd#%E`wI8p=E~vr9M@c~!+F->*zL#tMy`F$e+xVY^O=e-oE=sQ;heCN z9mR{({1t`?$s>A7sq%pHSIU$tg%Y-F zONF7ZGLYG#TO574k}46(MN!QsOx@Z3d{`}#PL)N9XfqiKuCGwdSM=om4B#n)nUTg| zN-nj&S~xLc*qiDblqV~#FqbV?f+;2MY3iy%l>!+^5Y%ViDJag*8 zRK72hJ9Dbs$y%`yyN+ev?EOy-X1OPf1hX3Egd>?$sT|Cj9S#(#rC`>)hS|pkquRiR zOlB~ceXRE}dv3#=V}m(!8;(6TICgHs++%~ea~qC3HaKo>NQRqxDdOOyR5(z|tUdYg zRC*|zZ!8WJ=ND7`nUnk1t|@0K6TE_7#dFA5DK^cRv0=l8M#Ab*)YVYAv9B<6_$i&$Qr|#|Fok?3%ojE&d5uAH zJO5g`S{F7i54)S&JDP*$<%>GHy2PH=Q&%*Hn8O9lT?1O+i;aW=0S!>U3S4dKE(?|9L{2SW`k#;LI8Yp(;D4P zDl8Seo60-vrR5KXy_pI%n2%bOJksi2++x_4C8x6^>#%2}s934Eur1Y_$=Ut#LM6L4 z+eeu*1bF9;d~Sr>VWmGE--L_Rkrn-Lrc}w6mC4R(FI5qCWpXY&j+s({&eWHg(L9{B zIMFZJ(!%V59(PV&j9j4N0H@qn3v97LJ$L>_t=-_24*^f>`<2W+5Q1-af zTWJSleN>C-R3&4Mj7!bAT(}UM{(>9RWb7pEiXzH8R^8R!p=^awD`8pKP#flYGhwk% ztWqL)Nsr`HLu5av63yib8(c7Q-mL*oGDF5tDx32oL7rwouL+v- zGz)U3LgoFK=3-Hi7fZZ5*IcTUXSC$$eU(%;Kg4+BtEfCcCW7X2mLS#sDx*&`e@dxb zHkA(-6>>SXGj%;01C4b-^OCOS*5$BkLGz-H?qI>fg~5WBw${^IKv%o^!h(+O<*mMZ zENSUFz2(%7mFgG^x>hW2X$=-I;`Nsp9Mfv@g%TENuDoWG8SQlCe%dh>^hXsjw;2j2 z>P8E48Zb}IrD)9ya#dUl>5*VTDNC~(@O`M4thmWb{bUA_WYU?nGK4H&_~ z?(T4*(ikpJ4P}Cbsaz(XPL;yeK6(k9D!a=;f$>x-eBrhs&!&y_u4~cb(hXE}0m}^bPhFHc|>vX)JV^ z%VqQox~!j$G(8s!w1(KK>^eFA`4qP!)TOQm@AaYwEl*x$R^{HAKb!O z(ar4WW)3&`wb{~8*rMhfn>r~x#ENue;Rg)!>kMH#wWg*ro@LlWZ;?xdatv3HS#DLc zBK4hTME18;Ivkl*Pj-{4W}uo=Ch6pc3WX{Wsr)e7sh@JoRPP1`e@8LX=qN!|MzFAo z+>r0Xl8#j%atA*|)ETU?cxT^K+I;h&1&fxpF6da%(;6)5Xm4Gv*0zZ8 z#Qg~ul?p}L$A-K&x}nK#$yTc3?^`t^`8KPdVJDSNYjO8osXVg??XOVOu%F6J53_5T z6hk*2mLgZ*80bhbVE9&k%`elP@@S@&DfRqCPC_(<43%LwqF`ihu^REdoL~_-b!I3FwE+f4bJhSG z-Pf9dIXVlxmqxUro_qk&K+IEbC$}g$bX?f{8~a9SET8cq_H+$?32`f1DtW!*HRb`Fjx+ z>?Zf`rEctxe|7&+dG#|4N>lnM90Dk zs|>0u>>Wuw)(Vdan!{WXW}{u&vOa?TZ{zqvKG;j~|Dh`I9-8 z$m}F<K=(1%D23Zf-ZU6R%A;wtnpHd>ng zpFg--CZ}6^UZQWgWnDZ|H-_iNdeL?a=T)q5j%0R)`qtbCG9!2cksQrICFDj?jayMRA*M@WD!$<8D3aMcRb~h@RrG{!ZddF>|7Q%YW|2;94Lb5ntGl#Au$F}=g#$JDH zt~!X%>1C9oQij!rABfyAV6|@5H};{)M^RvzT+|X&Z@$DDL*LuzaC(9(Mf6n6ZqDp- zUs@d`*dF36|`S4>p~TpIHsLpHr~baN}HwMo?!g^oH5O0P;GpGr|o&c^6Ti7jnJe>YBM50m;|sMmlb!wDe*TtxXi2D}tCd5WIaW+hTQR5oNPLFUgbUPu9bUEpH9BU#N>le$& ztD0ZNmt7;`Uq&n04XJEJODDIsPa}FQZe7|MEY9?ns;SZlH$yBD1NX#umFi6{LyL(X z>D_D+VxPBZU1UyPd*dy&@^q3@9I!ikPV@}7DD?g+QvNupPJgIENqbn7kgVKaOOP2P zdxafN&MgOvSqz1K6|W?sGgcqLI=&BE)ywK^+|tZ>8MRDyc1bzfSxCA=OOUt^o6Mvp zKt)9hLFYwfp~urE9bJ(mq;O~HR^{#v?SNawIzzYh03Wi)Nzu;1tAnI$>_dN0UW>?x zE>}*JffjcIAe&~jvsgOi7PpkG-Nq|pXXPJG6rm~v!F(aDB|}DnnkafI^Epd0kUFr9A(wc zWVdi2J5(G$L}zNGGnE_Pt(KWO<*y$@Mkj5B1U9cfwqEbEHYzzQZAD(6-&NT(O88M; zvlKeI;0of&hAfjpJS~#g^wU(@0DyCYD z2Vcf`H43*H=q*&rjp3-2lrrn9G~{yFKGJo)_86sh&Ds?fNDp}q}*(H5P z3w-Cz3`zHB!Jo8qYyL47Ga|1u)EXFUmK25A&c(`2{Mi4)Exxb7ul~g)aNqI}wpp}89w!j}+VkK;L zQAZ}1-nC9kj(Y`tjGq)$dR4{5(2_Se7lspWNsnk{OO9E&%pA<598cFvQ+YQnEiLqV zHPO;4s*77-Hs)VZA-S%5w)IKmLYH!ZM*3@B|9og=?uJm-swPPPm;}^hqt!} z?V4-bQIrqpFM19}VqaPq+4C&ZQkViGgVQQSh81pW(YtAr(cdLBM1-aeU2h-HO{2hg z_I}IKyVUMUww}P~v~Yl$&7hmZxRGllXlErER)lsE|(;^oPMoz(L)Eq=An$+dGaQ-v;`IoDRW$u8Z6Mwms5+b z>UEPbZIQE$3~v8Xl|5!JoFKGA{?_yvv1nXpOR2k!wMcDK9|l*=dv%ue(K2@-IWTuQ zg;%|JvYZ-ridWkW@Q5qQcMqrU4a_OghdMfn0J7nuVOMx5HXT@E^&UL8p0>!2I*w_1^s9tkIVZnYK2)Q$eOGq}#8wcoxy5!eQo+G!3}7%()Y%XPTC6WWL`*r5)8cek9ELPSq7@1dsx! zO)kHh?>ZgK_z~85d6kFiG|qTV>{ms*`;+|%h{@=c#%3OW{ZzLK!%d(xT*OQo9-Zq| zL$K1e`F4xm^E8zBnWhD^opeh`WXagb`WF>3=M6LsvudjM5tXSEsS|rgK_>$>`_T++ z+!6yDBm*o1-M!oMb$9W;rZ**b)|^eGHgE>lUg;i+Zn0}M{@zP@&N^y|^3s#)H_v`0 zC=Zn1!U6&@QuSK(7zTe0;rTMduq@qL(&%SbJt%VVHfpeAZ4{3bMsC^A=QEOJ5TU>n zZ2?&>x{0Q~*z9|_+bnlm=5z)bnnFj7Yf;wey!1i+jin`TvNW3;vPPtg^EJt!tm;F$ z(h;u$!@JT|NTckIXp*|w`n}A^;N;VBHkWXxk<#WCq*Q!nko3y{uiCC{1iAAh6h^!HU70?= zsgClItvh_BbveCreB)Y>D$NyskI`@Ghe74Q^Dxsv=d6SS_KD zEck+KLoN!sq$iA*1YK3B1G}naPORjEZl@k>3X7UCPCnPo2u-ujpW;T?b6cc`X_|dL z-Z&nzR%E~liRaPM*eq`}tcC^TgOzarjt&MnE=R`KPgfydO*3dV6 zv$4(}n^^rs_q2gHo|I+GZ&I`6Mns%{!m#0YLQ zt#6$v(ul==Tvzlaj_Y;D`{+&s={DEPp_fzF75k@${n@qC!(yJhVtVaS@{hts3#{%; ziDPbV0jlLZYGRJmVXGq3W?2EzBpS!-D>7{dPE_c{T(zI=AE%yVVx(cZb5L%jkzAmt zWdEPU9M!$nH7-&;PXmzcJSDX|v8An?<*Qosr7XcKURo!%mlyjHN&b8zNw%AWKR;#< zWQ#>DX1Wn9>3~9=t}t zXn&dtaOzNZ9EMxzMf`zWGnkUZn_?x2H=2?J1qrf-Q|hpImU{(Bwy~r2g%$ zpjt)n?bd08pu5_;PMRzuv$Q*BVbG4GgoJ9Z4p-6Fw3B2ex9b(HWb5pdR3!9nPPIy$ z@MqGg_L{P?n=alr;HOx(vglzTDU`JP=Ng9o*jAcun}QxXsM@LRcgOP}8PR5uJ0qH7 z-bu6Pjt-l5Dr{xtJZPTd*y?(gfwf3noJ?=g0eQv2fap)Ks6lD<$6oW6Puja!YJFlu zsx0+Tl&n5lEv3u;Sa>Q&1f*5hv?~n?@_^G6HM$tk)3F7mhiksnE~IbZ67}3^=*F;} zWsnAVtsc=$`O!m;H2Wr|m(4Z`&%`OMOm{aINV7)2yy=y4^JtevOv>_^pzPERpx(8!UFN)-0%4CwN$ z{a9C$xfC~k1)fNbrG@;&^-hgQH>bjK(GL^r^VQ7saJA$jopM!q&@kOGA9_qFqqQ+&9#S6_tJjNE z(k0jTI7^G}#jl=~TokW)#JAdAQhASasjM-?oy^l8H)J3mdL=|p-D=F1slG*Ogcwqf z;W#ya(_W#!mLvSW!vsAX4n`~Hc2;^&agzl7WvD^_SoW(UjdmCr$9vEcu%#`DSz=DF z-plHt3Aw~oOM@Eg-7$g{+Nus`%?noKbpTGfgSvhvd(Lb+^@MGoctq43h zlr`sjxN&Dm41U~+B~a=gJ}4^fM8S~{@U(ZW!fhl`onm0PsPFHCWK}S&6*uZ&O z&2AX;OtABDL^B+4HbAf51hu{LNOity%P-$)q0@5|YjiQO&&~Yo27BgPbihnNI>+v3I2DO4Uscb{NqYKghq1b| z=I}p;`oBDhAvg27Q^(TIi6qikzTUJIz53RV*<%AS@%hbr^ANUWDx6jCmpa`F5IJSC zuf0V1)faWFQ$UNMuByWJ>W#$FBBwG)yd5;jd2?fX*>o{U#k!N7kaj4ccu}NkWhP>Y z>T*&Fqv2qTRKz&Ka!DP7hS3 z_yFy&W6G;%)6tGuW{Dj*cG0?xDTsSZ^7vUFFZ_==fwr&1zJH=CLk9 zr$Bba(dXV>3-tQ5cB7*=Ldrp{uvqY$Nn?}O$9M~;KB{Q4cLS|Tj8&FaK@F|x1{?62 z>Zk2+cvj<_#^WZSsb+cH&|dD(rW+Pi`^ybIg{E*qXGc#1Z#lWCuwfD9(iF~~IcrwK z%o7@B&kJYGZkjW@Vdk+jXX3G;iwz8kUV3VIQ>DV*1vtxV|5 zRXN?zuvjByQ=UI+;r8TwIO*hY)`=6|*w9%}TW(;v%#kCGZ|EsaVYRZB z$HcBQ8|{*orRZ)7*Q_~lP3FWkYgpj(7AcFsS<`2qxF+ur+pftM3Pp2D-1kjilkaOf zwr{!%v{4@V2)r@2%5U_(y%*A;b!M7(sI+$Wv&ASa8N8xX!z;T>BW6)?LLTQC*JyYSG%CNHej%;P~CjYg7!5o99 zeJ%iH18;!hBuBls$)8Gl^q<+28cTB z_M#2bU9mu!61v(blZ(DWuVEEbsScL2u`MrLRe6WHJcuTTqs2)l;!=P?bV=woIb>$R z%GoT7TsgXMgS-^XJMaGSk&7N*b4DzFRd@H;$b-`9QbaBX81HhMH@SduZYaS`0~MG2 zC31f@{9{kvk51=1}OaIu!mL>xe~%-%{+Y zL|-9T!pbpK87%k`r4mTN(B@6lCGt8&R>;q1x35@6@=hUwbY@Cb?vP8?6?EiVfsxaT zs>oCdM*aP4ogET|F#r-jvmc2B?EdxQ^^q2eZXg zj+cz9>uAv{3rHxMW%bDd=4tI``Fe^Em>j-^vkHfw;<`bOzy5qlsu(m=XxTy5Anb}2 z^agkuU5r@Cawtz}V4JnKn#PL5dDwE~shI^M;}%7#lYLYHn;^8gVzrQ?@p0ZSTUwXO z7de7GqbtP}BrR9-U?oe|XmQc4vRLLE$>1Ogxq!h;-MDT#2^(_iKpYG-$11N_M}~;j zwqqj`ZtRDiJzULGLIa2@QR{H+b$Iip9Q`loD3d%MK>x@V+ad z@_7y8<3?8VXswzAZ#kWQKwjn$QfX=zX5yfgQ&_s9GCOKxfC8$F)C#eiv}WV6#uqJT zRQYNGpH0wcNB9v<2F}EuE#517>nH0+B~nUVRP^96ZbQ{Vnu$tHB|{AM6n%z~;8NpI-iZyHCKD3a@ zX#;Not2cGy1%+~+T_8I4l1%9wHf!mW*p@h`n+@IRpt}Q>Ujr(is@osj*=VO)Ztd&3A;k&3BBX zsaro@G3}JI^TU-Xt(Tn?qxQm*gpnf^kAscG#b+8QKvz=UP^(v)5|vu_t%hYh&x&vv zvNZ*ouQH?+0yA0Co9Q+TJ`^}Q&uTSY)llU6DTi((tGLo(2S!5)uUV|)kU~5W)5H-Z zA_*X>I*zqQGqt+Bx$B@tY@ZaY+;>4Fc;)%NLxUew+1;R(`oAHMuF~YXHTGxtyo24$ zj&A0V;sJzzN{%6IfbwS}SqvXnzVC0)2(%fhwu2aTlZ;YE@2QiQE8krjjXsSGg zIq?n}liMbt^Djkqp(V#doeG8=x$4}qW4pCi3fSs3`s4%AqmkuL&?d=*;l0G%Ng8vA zKI&5R9=@2ucoa0##Pb@xG(L2>F^MEf3LdffB5I9s7-VbL9-F;5XF@~J*%>Tam(>ZT zY_O=nsHZmFDJjFrW3FqBHZxOH>09b(yof!>2vF}oO4ulCBtr64$mXh}15ogO1|1c` zwI)Q#(f&)Rb#!y}7WrTtPzPxYmm(T^C-o_Yd4_<^n|Q01IY6zA0%xGId7c(oAwg<} zjZysk_vck4bH>pQG>o(tk8pByH$>%lJML(t)QUGUF_RQDxMoh3hA9>;7AQ@J#A-kt z&9z=HaVRB`jUOLsCcf*#46X?zvWsS-*zD@b2A0S&5@j}p#gXy|RT)P>wraDXh75A) z!0eqz99l!ZxxDmf9@N)-v~rP98da$i9zv!srmQ>4YL-zRt-V{LsPnSi z&v1!;q((}L#yaqdlWS_uMboPUmdW-7iW%JTI%okQL@$C2tWzgpRJS`PEc4+n)p&tz zK|hLBQVb!IR~XPZ*{ko(@amPH=FKuTu9S7qS>NiH6^hvc1HMBv+gk-L(d4UwY~eK! zTcEV{QX?}bYp&1dNsDs@)I?7&k+i_h4Kq0-vulVJ#j8gym)atIAQADH2oe$2O*##6DI%)7SN$_= z<)QLy$u`(jK589PC>GrSNNcQ&Fkz_Bf));Txc1UbdAZt6R7f;MMouZ4*R+hHrL)DuzdmM_D8){SOQ zwL)Z+|GyJqCGS^ITTVjMUa0`-Z`@eISrg9TP`)LNkyijp3+0FhQB z&X$SqTH~nLV&#KVh1B|x2G2xcqX3ys0+@5`X*7Qn7Ew97p@=lp_s_&r^*CEO=&AWy zlU6xsUCeyLK+Y4`hJVd?qgLf4)Mh43ot1K8D-o|N&{9mL5+#?yi3*dFag!lav_8re z77&?h<)p~+dK1C~Ii;3kvr&A7fprY8$x=v;Dh${(M-~?9x>4Dv2J#`f%xQI*D3fIQ z`YsU_jY~X5&W96hK|OwpO+1D88EdDr*vdK~q9W}1cTFV3s8+Kp#J13O%fmFXm%}~j|2=kJPU z{1df=(E8oGXCh;hnW>XJNB_wu4FoN#Tfo&)NADPGaI*^|S2SFr>+@MhOIS_#cSTnV zPEST9!w$ar(U)PYv}&HB)swTaPT)Hv9W9!JStHWwtO$8S1|=ktDZAI`>X|0%)(G|U zis?KV$lX*icB0-wSW{H=xWxs1o-LsUW`#1nS_1}S!(hR!E2J&#W^pcUqIB&Urxg?Z zIOZBiH@c}*utZ~LP`9O0Z(`$s)s_bP(I4<=aBbAZRTn-?e8$8F&Ww%{S!c8zI(z$& z$@pP-aTOJtrDk;CT1D2U#D-J12Q(@T?vz>G2TjI*Zi7F#F)H*h2hi1~>mTRzf$VId zbap!k@k~OOqKTB16z4oX%A|_pe;f7t&;-k8!f|;Xmvgv zXF5D`LAhF3r(G;-j!ajzg&JDl(H}7x*2*y(ee1-s$6SnbhmJGD_XUxv>honm{8vw2 zhsWAkF1~v*?h}F~D0I;ft<3V(axHgz{AW-))G#`=uJY4e?beAubQ^PZI{ykfPxfCM z1{psRP9~k2E#KMpv82K_1n03^Q<1CEvy2H$-y=z-#zcypQ)7*NSftO2B8oL!Gommv z+~m28^Fgd6>G+#B(d$qR(mnY$#1hWPhn%#~yCAi#2(*@3uA&p)#MfciX+~+uI`R%g zDyNawB<^N3Rsqb2taPmnpxIz`#s)HD=Q6}I_eV3ReLqEZ+QC8uY%(`*2svNM98}di z4ou3f%VR>2XD5XsW*UlD>KbBdruuce*8=CXBg1q^V#qZwC!h?|o261S_vowwDaL~D zsz8Ni*&-y1jlgaOVjBugl$0)!6tjtjFT3$3?v)H?bV99a+56C0gkYr>e473>HPc8)CTBnV z{%yQ-%`2xVuj7cG;&x{V=G8sSP`B=h~()K zc44UNvQu`pvqi+Y6Q?9YJnU z+F8aD{vp#yPb|^a>!jF#^aegOhcjr`VJz)LQ)jG4 zbfX6q7|$ziPv57dWr$ZSwC9VvJH+8<0qR|cy z)w}o%X#Um4R_OgG4;fPhdC%ED;i|k{6a$apQniw zO6)ZaN82v1vEYkTgo=d3Mg22Mxm#cikF#09E=rs#EdfL2#~mk%(iE$=v}-GsKrXAp zYfgUVPfh(Lcd74eol@qVIrfKjU{7-(s|~~*FNVB&C^}o7L(*Fa7pGPdQX?IP!w?cG zTvv&W^xhPwQbQJS(PlJhsCh?SfSJr#CvzfeCx-#5{hA{ZCuRnH5mx9wNo&(*Bs}V@ zRMH3IY3=+#!XFEinzyKL`*}XmND~316p?NWLBM3#grj?kPGGQM9Bog=nqH&gU)@HX^R+V)Y5KMDqmIuojm}X6sgr`@yLh6n z*{IX;ElZsRaDST;$a`s?!@ho)v|%tF4!tPn6pY@p>M0y|asSB>X^H*t zWf%LXP6K%zLR?}Cw^m_fA9+gi(TZqJlsQ^ahMHKIDH~tKIo{NY&g zOiTvuKqx(&RC6$8%y<~ZU>%Cj z;SNC3W@!JuNyk!2?9400QLVV6Vx*I*p)Y86_72y$kp!4`IrkmWHdks(AkJ5?uBF3j z-_QAqYL^D(guV{V8PsyT?(B9lcOLmTSefB*XfC3Sgu(1+HJ8BylYlpHUn^7_Y zC2Jw0fiE&UF-w~Qk%h~qo8jtg{1HV>o(zQUKSOglrdMy|on#6TxiT79 zq*J87GsbJ$Pet>QUa^QGazT9XXsa(V+%hevUDIJ{K`iVt>A)%TgLM2+Hdt_R&cHkH ze9OMlK}Rw{8u6K#Z}d)-6J9vPrnogivIo}2Oqgo0r6p^J(O(JT*r~n^)DRV_vgTTz z7MRp9%>*ZZPMo&oC$%WE@!C1E@M*OPBeHapTWp|XM~5v(R|3UR+k6XI>bt=raU@Zb zQWTM9S>{^pAw^d8x>ht zPd!mP_|Zt`b~Q%r;@W`)JBpTwmPQtZw-jsAQDaCB*KvbMEQk}EDx(iUXg#l!fRrM0 zG5sRXv}xn)sLd58LP;^{#6maYL?&j5L>1aR z(IR8KFAQm@bV@h>eIYtS;`2gLb+m98L-P#1$`zaMxM-be)krUD(0RXnY;Z#tTL7;b zbe)MM*85!~$l(6eix15qN|BnQG18d^9ZU3YQ8YwvzeGkxZl^&r zbF4r!bEH2**3Gke>WW|0Ll*E>-S){L z5)WD~qbAU9gO=6^R{ZA)jDk$O)@5Dl*)NX|CUcP1PqFT8IYq{}gU}VdE~m$!RixWD zCSJU@6}9Oq$%-MbS&BbFkHYGjnQjW((2nn}>jy8azTuc1~urY6yz@rIt{ zY1*^a4AH#pv>6P0k}C(x>gSB|{!>J5RZ}-NN~~3>p$_Hbn)@nIUC-#?JzrkkOcb^2 zeEyU!3Y7wmWiPl;pFP%9qsia-<&R%(@R*`45wzv%Jx8ktH!6Bp>V=w%^f_({(Tay$ zGeYoc6-E3y!!jl}sC3z!ciT)+K;~lC3vHdFw=q;&! zpwqsQ2(1(1vQbDIW4xdz%`)!sJ_J#@6uep}WJ1N~lt`MHqgbdw<@nWt#r_kz`z<~v z4p6Z%h==M~+DJ=m2x;}Tg~!&mi|89sQr+33sCwLnA`RWk|6yIjGl7ipeJRs45)Dsh zdx3XSM|f3{hN6`k+mKo{T0d7GleAs`EX^2Hj#C{a?&~*~cv+u@u0fB%ltoZN{nTNv z0w@_KVL8#tD~Fg6{R>gGB`L!QW1Y60-8|y-jWikCszDZS;y6kCdMdj*RkkXF)w}@2 zz^KKQO~!6OW&hbt7TUV1ea?s`YhN>BlfxyPMV53Z4BdJ)v{~aAUo$clLS4ZI%Zj-M zRPS_0_CT~fr55RO{W)7Xn66RuLd;a-U%&=Hjiy8 zj$SVuqd0J)iQd(kOHEW>~@+i6M_R zCt>4eO-;fsZ<;tM{pj#3T1Vc(S;=;%-tuA7(1a*s)XIJ9bVWPLC7P~c`78O}eo_|~ zMJ+*ROsCgtNW7dl&SRo}u_+EeSSw=p-6i&@S=v|ltdSq;dFO?%>1EwZI4-f&y{Sqt za%NOoiIvS=9j!epx|_ldEmD1_cB`{78dQz7%bHu4E#tq|<^u%!TrICXbM9(bGiH=N ze?F0tEID~c?|lxj;WldSu;-YpI8b05@h`pFXi^_P?bkBW7_3^gD%!gU+|e&>#35U@ zyA7>q-RIusin}cW!hBMcvwi9|?ONBqw-jw3E#ZvHxStt_s@Bcrz63@UfD%}%GoHmS zSXnKw%eBlMGuK&_aZ5KUHf90d13?+UEX7(KK}wT$JT)^q#?H~e8wK^FvW1NtYoqGe zaEV=AJ_Haw70H58dh}p#(Z*V4W~$Z_>fVO!NxB&bUOX zB8GKen~^3{(uqodx4`wS3(cP-El|ZVXhr?ie2w*2)@!rT3$s4vpzQYkiBghs)Sx7h z#P@-(ZV#t?Luv|~2AMC{D>?NioLC%sG0A=2C|d4tGPHJRM+WP)?$-5_cyXGLu+=Im zBW{pLp%cp|oV08o&!M5FE=|nt?wnF=c6$V)SC%C)2JA(&zx4{P=-0%DC^;4I+b#7Pn zJiY8+(yM!KLOAD6%+SFej`-m{p2T>oh{tm_qQ^65ka9hqYim57ICvc+<7l#~4`MY+?2?M`KLN=U^&akBWZ@>E3f68ItD(`r`)-iz(K5JdrRx z7R3Nm`<_@F=U`#HhlS8@y~mRc8(~JAgz<1Ms{hO8Q;bdeo28>~@OToDPKgPzFsk3W z7zJD4aO{Se@f(K23>!V32$&s}E`VjRgrz4~`E=Ag7h3)r3`2SgY8`i3{u#@^V%|bu z%Kx$SBhuG`&y>5tJ#k3hwlfw~V%t$eMy4Wp62A2q(SmcEWjNk79P7=DLq zU&gG0s$T~+j%KKSx}er+0BXErP~)11+Q%zV{cXY__&4f#E496VoA)5?NQ^MgIb5xsOM@QmdA^z`hI)ddnFL#k#2~3u6kH{CuK z%#M$-G$z>R*1rj=|F)?6+ZFYm?2GDeGHN`_Q1y0W5g1V z1IDF%2P)oKE5Bymwfx7Z=ixPKJl`<}hCblt8y7W>w5a`_5mhg@Sr|3H(x~;Rit4W! zD!(17eou1%YWyQm{f}={{kk$JE;5e)%=BOANru1cVyH! zQljGdqxMk_)HsV-el=9Rx~Tiz4Asvd)cD4s;?6?tk45Hoj8FO$YP}wz+I>Qg4{P?f z8+YhK&iJT){LKK=xC)`xsU)hO%BX&8qsAMA>ZcoOzT;5qHQAhjiaQV0emN$`^{D%Q z9u@zomA^y9{f3Gc@vs|5G*o_E)I3t7);}AnePL8TWzA}siFAF`JVsmoB-Fm2g}P6x zto$hIKAuKB=l4LlZ2T=8Im@iQ8;h&fvW1n&DDx>ysL)1PVh>>tQs-MLe6?db?6@nV) zWlP`2gruLEq0YK_CPmdxi!(60rB9;fbp;jY9;&~m=6lq*_2o?c$HXAafQ@k?*1@-^ zeOB(gyDv*HI_aILcp<3yTtW5o5_R7{pzg<4)V>IH!QH2b7=v^?RQvR(eI0;`TM<>i z5$e9Sz^K?2eQ_|VpJAx@i;1|!#9@pTy*7; zu`2oTune}rP`Cv(&K;IMff~nY)VQvo;@?5-<7cS&KQR_Yz2w@bz$m11m_%^hwnFKk8-IpTAkqtcY6oMyPT0LXCeoD&BaE zgR{&HsP#OGx_=i@^&g?e`w}(2@2LG0`HC}@Spc+v|4a;wg+W)Ok<7tl?-$2xT8*S;CsPQdEf81~7 zFU)Ud#G9^t0#v+|sPX4QjkAEI1FgIw>b^EX_1n`NWaVSbd8qMkM2&wJD&7%P`}3B5 zg4###Fad_X<;IZ|b-%Kq%1dE_bzjb5BfN&)G0z?M{#b_^-zL=j4x#Fw#pQU_@(0{?_h$^Y zA%7OO#W45W{^^WmNe{!Ocn+swj{9!EhM=CuYpC^niUIfzTVVQs-1~kamL~lX6|c|( zzT@I3oUeRrjnf{wKfie%xzFpgIGg++?2kT=-S>xq7)1IQj>Ak(*n7Ae6+hKezI$Ou z9EPEJQn$vcLt8bV)zfLed_1#=Pf~)g!D>`gvW3MUc}*8?}d9# z|G{viQBY+I0qx*QcG_zcVZ&)|F-fw7=iRN)bsVu z^nK;-M+{6zesZ$_YJb&2_17BJe`hRjpxRfkbPbF~x*=*j9WW{m#K<@S2JF$xw$jjtSP z{EboT-4V4Oqfv1tVhmi5>i;0B{5UGk8H|Cq%vY#>JpZ|QML?CuLG6pQW_Gh6rXxQP zHQ&x=57fH!LA@_VU{;)us(%i(E?-QacWzt}Q1>C4nHW_sJ*xj~I0p-$_TP0>zYkFT zJvHB>#_f6U-a|1l7Ri*B&W)-ch_SIcDt>EJf8Ed@`(kWdiK@R3)o%!DoR=^*-naBe z)VhZH;NrzF6QlCeVss2JOQFVD3-umvjk=$MQTu-qYFt}U@8tui`+URFA1od1quWOr zQ1`bq*2fCi5m%x1L&8t4eO}Z&tE2WseX|*Ad~Hzk>|^=EP~#YjF>$(;uR^W=7EA9$ zt;ZqMe6FF!{npAOeRkuEgX%XCY8)xd3|5{UeaX**s+S)%o?@u_V|Hbv6 z2X!Ayq3%}=jDwv}^@n3TT!b3OF4Vf7!nAl7RX^NUXA;!9=D=nch@)@~w!~cD+;cS# z(~v%ff8i_Ccw2vW>(c=>kM8Kbzo>Z+L)9B+`IAxWIR~|#i!Hqo)qV%+{_I1&FAk#O zg`nbGLhYC9sORJ%YMtMr*3o+DUUP4rVeyDb7QE{?cer{BpLY7|+HLl92`_K>* zU>8)qv8eT&Y2|BB{U5-DcpmjUzd()qGin~bKV3Q!s(u_)oHVHNyjETeHQw^5`BX#I zZ-!dWZkP)DT6!UBo-0xPtw+ssCu*LD%@e5hXHfC4pxWKG{0FFYe{T7&uo~(2SO5cm zc|7-U81BXv{7|bDrttCcj=wc3UKdpVy-@pf2x>hhqtkD}K7BC7p; z)O=o`*5@N?9e$zeMfdgbe$FLD#VLS_TO2ixTB!LpK*b3{#p#Gz*IuZ8M&clxV(B=c zTzo&&_%ox%Ul7%Q8H|f{QT=ts_&5yJ&pgz4R-oFiM~!zMs{d1%2rr|aySJz~VMDug zLhL{~3l_q8sQY-^{KtHPn%@glfA3NI=^JYPQNy@)u~Fkqfa)(Rs$EG`y$Y!I)hxd* zh9ce6(k)Q+I-u@fH`MwKLd|Cqs{JffyM?InF17S3ORqz%_hwYQeW><_QSDEgmr(U? zTKci2U!v-NMz!||>(b#+?W3FVQ0qIVro_o*7{J~lzcX=~*@ zQ1kAK8pl{v{9r4eh1wqrQ0u%A^`1S7s&@;ue)m!P;+6RWHU7xq+&+qh8mB+1eooZ* zidueY)O)=W>b^Fy{9dSf15x{RIBGtVQTuBF>T_X>c?z45eux@hsqk*z z^DU@)J5cv?pLrTJ-&?5r_tN}o<>4Z_amGcx2mDa?r2y)4raJ2WbwJJMFVuPrMa3P9 z8qZwRxR;^s^J>&McB0nhII8_c)Oc^B-VgUt^M8-(H*6#~&ZMaC85vRa%c0h-5~_Yp z)P8P-+IRg?;|fO2b1tg>D%AKkqQ!Ie|%+ftDG3oxO^`DJezwPD`RGf>baon-=zo>bB zK-Kq+;>H!-jF0Nq&rE}A?{DTo&AWt^S47RLx|P>Q?XOm-c@9F|-;q{64x5pliE8%) zn_`%#uHROu_3U8jo~Zu&q3Vx9#hrwj-wf1!S&W*`a#Z`RmfnY|cgnnK<^Q1KK1Z$V zC)E2TVl*F51x$+CSM5;aABvjyC{(*Cm;~pe_SIh0zBr4jchCG6wVv-$ z;|+t#kA-?}5~2DJz-%}K)!$asJPxA9d&=_fqWXP~dd|P2#v3DsTc^0FbxDGHt}>$T ze?C;)(y04Y4fR~KL#^*%)IJ`CYCjXTuFK60=zUI6@s49^yo{RvH&pvDF?~FfFb--R zmZP4#wO9!cqxy{<%Z(!gs=PSn$GWKgr(tGXf@$$0>b`$N&Epqpe34@Nc(Pz@)I3U{ z+LuF(vkvNhwLq0jG3q|9K*e2+8pjUojfb%(7K-Ec z(KgIU`ivPWu8;TU#(6L+`E4-=&awP+sPTo0=i~jJ90_xg&Wftn5{u$&Y=gH^_dhVc zn|A|Lx;ZLNZ_6Kqx(_2QJ>Cqq{5h!mx(K!3HlpUY$2@_$KUb{$C2CzhqvHA`aQ8nP zYW-uN_Gf%lz4WN{&W>8I+-7mqdR9WUtBR^$$I6?c+I2vUt1D_8{Vg4gs=oj=j+Ll= zxE>X6Cu$rAQ1d&Fs(%l)PoJUce?k5ECsaZoj~^yQ)hmo@7l>MqTBvr-Ex(&N1k;m0 z8B5_F%!i>8x%*HE)xH!eZZ%YY^-=q>Cu*LfQ1cs)>Srlxy|$v}cMuil80x)s3AN9k zqMnbBsCY>eyZw_DwI6Gs>Yv8scptsN$Ufde0^CbLCkv1L@kBl#Mb3 zwZ9joaPN=psPUdgJrA!@aqFh^@&0*#FzUXnMD2%*sP(&nx(`oK`|1s9oxh>>L%39K zU1Ol$Q^`>48esXQQE_UZ+BL-v*um1bQP1BqRQ$J={~Z-Sd}@~;6LnvbpyFgh?YDxc zd6q|wy9p{@E7UkTnS)X5GZnSo`%&|{joLqtQRDxJiWfPJn^$twe#(N18-U(^QR`S9 zHLmTbb|+Ew@1geFWAi<#f8VsOzf7q93!-5qt^42r6Xr>>zD#Ho-C;O=0^2b3Kh31s=pvqyzZ9nj~efIRQx%p z_1=W4cNP`z8miwXm>a*N;^xfg@=K%cXMI$^tx?~nx}(N54pl!GRd0pmZ$*u3FKS&+ zTmB`~KD=e=H>h@>QR5Bc@8ZTnjWdy@Q=!(~9~CdV<>$3@QPeyGQR8fge%J=pZVYNa zO+xQ_p!(f}n#X?2KZdGz+sdD!_Qwa*cz&7TGr9T2K($YfikBYMe=bzN#Zc`7t-Pw` zH?njPDsC54y*{Y<4MW8li;6P?HST$qzXknBAF%TK<`dL9zQnZn4K<&XnO*zLsBxAs ztDyRAh#E&L%kPZ({OXT-KMg_E3%2xpR6iS0`)EIEADlt0$9>fE@eDQYP+4621gLf? zQJ)*xP~TfCpq}#t< z7S<(wBB$F&sRCTRoT%>$#Zc>42enRJQR_GX^k2|GuO@<|F+I+hY2>KAyoCjHgsDpO2?KKEkC~Ex(WV_c^|x z?pMD8KKd&(&kCG^vkUro|DHTcA?F0FP5x^$u&|r=LaaspcPxt4i@5I%)6Cs>OZ0f1kPw*OLxY!p9SgTQMV+E9vU>#4e=oVhgNV%E$Zr>N{}+ z>58S@e!7AUR1dYU3I@7;Tn@GF)lm1NwdD^%)f;2ZwEX3$_xpOxf}2s#%>z`Nmu9Fk z?tUb|>g0Dt?VIDM=df8>_x^2%dJYDelTpw0VpQCdmcESI-#<|8!`PoqKk)o)6s-yNnGfanbQ0saGHQx`Wr-F+U2{q36sP<_rKLGW7 z7ekGwB5K^#QSYld*d3c-5xk0JFn&cJ&lPNn6)|rmw@xEb^PG$t_iW6Dt5NZ8qxyM- z8s~G=x_-oR7_PD_uZGI6gW6whQ1@dfYJ6i*aVDbXGYz#qOHuW9SpI(0{XK)~{~oH{ zQ%k=>jrSv}-7nO-hppn)D;6r99QEGJjQUU*e<2odvZ&^PuV%L&YtFy05j&W@blJ zKYdX32cho6NL0Kj<{Z>IFGbZ~h3bC;YP^S0?N6b`d(qPOQ0wvp^;~~K#fehg)sKm~ z9|=(XW<-rY7pngvmR|;SKdW1LOS3b2$B&9T2o-0z%!kDRs zd*8N4eLfw>2Bsk$ zjHPi8YW$(=xaTz@`jO6ujj$f-`{r)c^ZgF9qkml=@4vfhgnIrKqsm`mPE1qJ$NT#V z^-%3cVjv!{bcFhDKNiLG|eV!4uuj}A8 z3`Whfd?WYg+pgv!)boEH)laC#?$7C2u?y)HsQr_ui8CE)9RpDD`(S(AjzO5ZsauCJ zsBxY}eeX`y%&kWOEJ(UL>OO2neV_P%6R~o0=Y1Scx=WCIfBCd<aBupOR4eLutJR)hbsStZLnP% z*UwcfLi!8l!hCJrzV3{A|MbE5I1#l!SEBa&A=Gnm3ibS-NA0)Uco`pHW!%}$?dOQ? z-8wfz)tisr=ibt*P;oX`dXJ_5Mm_&$Q19Q%=0ntb`yFb0p*y&^Nz9a}_egrwd!(RQ z5*4q4rK_X%MSaU}jT%=c)Ofm^gRFcUD&ADo`piL%Ya{A?c)-ffpxzf(Q2pJv{HLgT zZ&2&_6ZIYm*U`PNVxam>iJD&))V?c%idP%eZ!=WCy-@K+p!x|$wV#9f^X3XvKSxmS z$up?>4^j31L-q3o)h=Qu7e6j){W7B7vxQOfu4L9i-N#0l5Q9+9??5bp+i(&*0X6PMsB!ePbU)NQf>HN-6>42Kqds@` zVS7y8-N*a;))TNA>HC-i1A4f>M`(>1N$*7EKSIqjK~EpgP)v@Bw+y>ugkCj@oHchY=pgWCF*^evY%U* zS>_qjx4-**%w@Jk{l3NmEP!`W>zR0fTc^sHlk^DGbF&BaIr|@K|79HL%3Gs8m*=5B zp2sx!6YF8>LGJxN2vd>Xfa>ourpB0qeY~Ihc~JYK4r>2&z`i&f^M;;8#s2DJ|>qwY%`OSiT1ZkFzYTKA!r z9*IdwPeP47DFbSs=SRJVN};|_HL>&n)Vj~Y6nF;pyuL-n`H32D zxRK7NsP{k|)bpC$(%Dh_q7bUTK-9jfhI$U`q4rf1OSiCeJ4<&)_1hDDaVV;v5vYAX z#qt-T#;tbTjeSo@u5hl3rXXUUY>G7BiFJV3mJJCJQ zMN#8#We!4pe$PUEAKZ?5FJ4DIcV93O#+u~zdlpMXQV1sGydqm9XKAs7r=b-kP{|q;uJg9LOL5-sfYX6qE@ht_> z)O~x5x(}XNu3dQ4zD$6Mn+dgFi=*y;4fMw@SRd!3o`>(KIN@fy`9wqQ!vv`HPLFXh z4{D!Ovhud5c6}^81b332g4$md=D2;>9<|QHQS~RIp8HvrKOePzt1$&`K|MEDF$;c2 zjoW{&`#w+hMe=Tt7pZ^O{ z?S7!f5pJ#E;rYr;%`Rn%e|=keipS~ zuc7wiE7WuI#SFW|jVBhWej-%8RF!Rk@%xsIgKV7YS zgyl~}wVz@6^HJkkVdYyby%+VogrMr*K+W$ys-JhL@q9y#JM>c5Uo=!YB`R)aRQ>$u z9Y1=A4XS=u)c)v$x-Sz^ao3=po9(Fk^3Z&SYWE5??~kbdA}(|Ju~7Ff z5h|`fY8*vT^#U;!RzZ!c2WtGoQE{iB#xWbUU$$HN9BLoEK(&jwoS*CX@VSl}M~M~A z+NgfoncY$S_qX&gR6pZUai*c3i)EUnvCnrEz)Zr#$M z%5$LZV}8{7RX~lSDyn`RRJ{(C?txnOF{pl~ne(v(=@qEOI!PY-@H$?S}!V{Wt=(&QnnPWgcpLn^Et} zW2k-~qVDro)aQEStv((6Q_Rl?3y-?d+|M5}JWhzXM z*--0M4>isq4sUKU2Y$yMD5=~m>Mgg#@ikB9QL#HVAT9ZqsBQMwU1Y!#&HC7 zpKqYn?JMfO#@g-HJ0Yr`Kl)-()O{{tRzTh7nyCHM7&ZT1sPPR!jb|#V|Cy-!u?Dps zyHNMlKWuzXttqD|*)j)$hM%v;%J6=0uIZ z7OK3Hk6Lo)m5BYfK6AsgmPKO$IB@Dn;*be8R#uMqV`@UZh^OEj@ zTJJTeaqUC(chl03Q2qKIapeh7&qr?5zA1sKUk$aN8ldJ8gql}pb2w_h%tqB)hHAGC z6=#Q~kD=y&9(6x&pzhyi)Otlb>h@m-OiQ{T7Qi6XK3s&Vzu62y^?M(+A6}sP_dVvu z84>ll5Epfy5@UKSh8kBp)aPj*RR3d8>$D6t&qJu^|19dcxPn^$XQ*}ZJ?{2dG}O2x|X*z+9N{g!}VD6;!=}=!c6?&(|T;{BL7Me2oen&>vsi?Qazl6 zWlp=lKe~y%NQXY-;~9wka4G&o?Y|{wo!d~)(Qzz_SFkn4Kj-7=jDu0{i}%1ePRS z{HptT^e7xo`X+Y5rq|rx!(GIBr1M^P-$#P6G3gJe_%(0%c#7aMEP+o@_tXET+pkq{ zI_ai31HWQEoN~)O2WL?C?<%U@C-lR_x7~ZHAnJZJMmnPN7H4nA_S7Kw_fc_Zcu3P^?sP|9{)Hvs$ z#<>JT<2qFP&8Ypg3pJjjR(=`vKDdEu|G?7EQTygS>bVSi&pqGCQO{p)Oo5eA>(&*u zA7-H5g9k7NhPvtbeHjJhuuQ1iNB=?AFz z&r$RGV)+ptxpYiCPJT*My%(tc^cA%(VIJFjQRDSD3!v_6dDMHUBWhlwEPnxN-yTBs zdlmKh@YKpvKXLmd5YwgcmFQ1~G zuh*z?eL<~jwCC>rBt)%OO4Po~huSZ7P;ok-)~yHXzK=llvlun*6R2^$LhX~UsDAl} z&))kV4%L5jRCz+v4^=OXm1jcrmm9Uu3tN5(%dd#q*ELb?f>80=S-K0VU2oJp`=jPH z6}1mnn_E!h*^9d0$53&uqrOMoMZGT`px$%eQJ;@VU%Gu+05#vTsP(9cs^7)ZV^I5X zIVye#>b-gkGvRAgyCkn%yS%9Nu8R6z))GhKB@D(!uieiDKVUA>ncuklAk=)np?AIC zx^y_y{34^)Gp^+)wfvNpp9!^|0jTyR%yQ^Ux+-ejYM|mZMD^Fo((O^-XL_R6d8j!X z)$b-$++F5D)N^|r73Z4e-$uoGXz918_4WAZRWLQyMcw~_sCctc@4p?`2d`ovR{Q4WGsj$LEUzaT&FKw@`5(qaTL(?();1?sHbuxN=#3Vbpu53@UyFRJ|Ig=cFF$ebfpyui>cn zQ&HQ1!o|+K2w((h*VZW1;#@ zh-#k#HJ&V}b~#b)3Zm*2H_KUmHPn3Spz60o_1nqH`=FltL8$(wp?AKPUWD40D^dG! zw|Nz{p6{&ulNsTsdma*@`paVJJg9M&N5!j(>aRI!+-*_sgRZFiJ;d_oqS`IB^3|yM z>_&Z#oIu^T=VpXoKHmR*w6v&pTT$cKjcRuowSO+4*5Q`<#QYC6t{b+l=|0+%cRQwi}ZjZXJJy3CnpyG`}#hGg9Ip%Uy zy-lb%J5X`=qt^AfrEi!IP~(1qYWEiP9{yzIQGI;9_cb1>UJf%4YCZ)~@3%6j&;JIf z_e@vRdt@kT|4g_1HK_Zt7j<9mqP}PSK-Ej)>+4}CPf`=k_V9yL(&YKU6jAk=uf zqSj?JYQ2I{`)?7dpJk}`&SCQ|D(+X*_l5|eTz!AkI%Gx7BNwV&Y1F=Jidy%+sQ!mq zdNOK!vry}@7}fuJR6moQLXn8)}^nqvmx6)$b+LdfY~h=RPX# zThx8~iH$K~1YhsZN&2Ab9W>9Q_Wym? zn*CAZABWnvOHt$8k9z)(qvmr5^&Gsg^3Rs<6UmJ~8v0S57`^WiRDWe~8`edQD@J7Z zeu#%{N#{m=|5%Kg{~k+U!;+-mqWaGr#n=0Dg_4+)bZ^u;u0!>+2{rCRSPW00<{vGp zE01fYMeqJV?VEC_=d2nkUTw>-kD5nwEANDg-`&#vQT2zQ)^`NzeK!*);5wXzg`&Cl z(RI{(zGDe27TwqT`}QNS5b2Xx1|!Ds_5NOZb=3GKVgSy-%6JCLVX~OM-rwhGi~UF+ zKz%%b$&Ew-B}OHld!6zft$$I%@wtLG9Zx zvE91FM8!>niklp@{uxp4+w7?It6=#xQR~~lY>oQd?2a05FI4@3Rz3=KpMp{S&O&|P zT#g#oVO0GKsBzpxjpIIQ9M4hX_z!jeqr`Fb{ZQ}2^r$!mu^^Vi(l`p$-+5HMJE-;f z4|Tso#dXF<#m$5{un1PeZdeMBquxW&;<6jb$qxRb;)I2gJ z^!5HeZ4*@d?WpJP2Kr&NM84ji*JVY`w+^PqwW#u|mhDFx zePSj~;@(SDun76BQR7;LHP|TkP;qnlxqj+lM$&z8B(A{Bm@T=l_xF4nV@lFfQ2T2; zYF+oE?!y_>ez}Ue5BE{e^#|1ZFNb+9!c2-E&mO zY>kTF8@=yc%U_CmuC}7?^F`G7?xObXE7Uk6q;mblMD71nW>G9ox*=+wi%@ZnqW0wl z)cf_3>66;UNrHN=vY_@|PE^17aVVBWJr`$Ddm@ylCm0sP(yzTA#@YM|D!F=|{rQ0q6^^5>$~VKb`zan!iap!WX_^uu467X31~ z_JOGNtcSX9ZBYAjFsi?)<|@>D4p?~zs{dQ4=l!)AGozbV0BU^;pypKu^<36Mt>ZY< zeqD{4&r$Tl8>n{QQ2mAXxBH9APm5ZQoT%{?M$NN^l{dlUq&uM2ccSG_N6l*q>i%v+ z-H-j|G4m{{-Br{&-m&yU)V_I+8b_E+?)i?1s+S!#t~{vwP#pESSQ|BuR;bU%E~t8= zP;sVO`9gEGxz)<|qsDm(b)PPw*7JeozeUCWf{Gt1vm1XxR6og4^Yus73$XISW+~M8 zE1zfWW&RnSeN?E!V>T|IrD*iy!yyv5yhpnjneH^vFAEWB~9ynvT*FD}pL>-~3-LHT{XKQBFr zLFA_>;OqV0`yGkHNrx)vzGsid38YWsWNc8#*K-fw;2=C-*w_1e#?^}WdjB0sl%no? z#u_Zld>-Ne>ZK~~>-~H3CD@vDtP*aX{jeYDXV?Z?mUQE}fHg_yDdp?^d)*0`mvjgg z!O*4Im&7lLXRv&rulIk~KT%oty?GNJre3&mzMk!P3e|3Cc{lDOsP9XqE4V+eKEM^E z>s9pi{{IVvuH^R98tg*;F4TR7d=D;(S z?_0&ijf~otDX}XS!@9T)k7A6f_PkS8cez}Hvj_;$M{~wqRBUX3MeGXK+e5m=9K-H^_dTxSH&s#6l`(>o%Pe;8sR-vAw zji@*w<|WiP?x5E3Au6sfU;gyojE0IE4^=NMs=rLAdPT4ZR=~_S9?Roi)O$8!P51oA zM~y4JrSqWTmO<64W41)~+Z}bE`k~fmFb>2qSQR7J^7a0EhDP|D^iE4Jt?lOb3)L<{ z9oK(MEJHdaDt>#^x^zd4t1oICV^H^dCThO#QSYy>sOLFSUDqy+nF$pyr&$2~NS8p3 zKM3_cYJ+M&5VdZzQSn!p>ripFn0rw7=`d=Y&Y;@eLG8EasQnVEo{OIh6+ZyAuPb8# z9E#eH2eA}>GmF)C>o^KE?^~$;|3$6Kf2jTX#qvWpaO)Wv^|=-YwO;}(zZz=1^-=9x zp!P|7)VK$t)?u8LFGkIOm8CbJKF_wJ?%N?$|EEyvcokLu7Ao#PsPTRV9rfppz8HiHumgr| z>g#EO-BF)|SFt|6MeXB?&3wJT$FmXxNPoc!n5DT}r+%n@hN3_2#=iIz3u91_`}59H zRQqRG7L&Db@Ao!Xp7ee!fstFfKi5~ma-=6~|wGwEGe5B=M?xFb>f_$X=}qqKGXSH@SQ=VCz|+s@SsF=MoM>Ds7q&BuB89LM44 z4)&hv==#7UXNr&KItk%ib`|o_OU_;XBI=lDs2+U7DZl0SkJNZ$&yZ2R5%tm?)R>!@l`xUc?8($gBNqUy0&th8Aem!0N zKrBsqE{?%Rm;pQY^7a1y+8oq-qF8TV@9(`0z=5PA{N>_|#%iQDq2?8~k9$6fp+1Mo zq22?H%zminVz#*u^?qG$>1`N^?+JTQ`}lZY_qm_BpSz#SP|xEt)N}s<74IwRJ?QE0 z($P`%;-a3n6sYGkgIO3gzUrv&3$0Mk?EqA~QKlf1<_{c7PjaA~P+jUJgs=w{&T<66$++E!2Elqx$cSdcH@X)^nky zH=sTTLQwS{qxyZ1TAv65opDh8CP%eTk7+Ou>iyIR^|{gp^`0J#syD;(mt$hm`%(Mn z7V3LaxIr#I4XXd*sD7%T`mckkAB2H85i8(z+=gifyM1~GGm*|Q#KmobYCjOQ9%C(k z9%>wWE&m2;{x8h%LtVR6sP}tT)cr4mx^In9pA$i-adttyxBo)j&oP!CjA}m@weH(c z^E-!n@7zJ%_vFLedgnxqs|;%2v_QpgkBZ+N6@R$pPek3{8K^ibQ1@-Om7ha>4qZci zuHQ$E<2z=?xWnE1vm|Pt_dtC%IuGtk_PI~ZI_a4bG&b@E? zqxRiy?2kuL<0?7cSrN5R)V)A5r}@p5)rKLhX|dsQcK}{0l>o9%SXiuqo-$sP%h^`tw!C$?oqTUZeI& zz!dlX?}epF??vtZFjL*!+j4aiuzocimHDUljDD=^^HB#{rNK|`jOs^f8j0E zJZsHj-}&(Qh80OapY7{;fcfUQ&yA#WU7S*=_$^TH-N~qRoq@XF^HInty9#yR_n_u=-h7McNynJ)zIWuu9HhIV zp2y{=@$EwGk3;C)N2s`$QSXN*sOQYH!1Wsq^`1zGYM&0(J{xLZ4kJ+G7=z_77}f4R>OJrV)lcY!E=~m0yd$IH`J>tgSh}zoh#E%~ z)VLa;>a{|>Kf9nlA4Z`*9~PS1t^Bl=KSbT<@2LCiyU4wFBB1U=O4Rz~F-xKPt&WP{ z7}b9-)cOuVz2E1c)?tU0hoHuH+0u8B?db7gk(z12?cifU|JPxj92yKq7hH^28Ds)A z;Al!-9TqJkbvx01E@x_D93@?ZI%z52@2YzLyMc6j>ffeJV|dJ2Sd->BNnSFGy9JMv z_rP1iyOlbpxh}<-OgEWh6X#9((@~3S-W&x=O$)1tN(&Je>0|Q)@MVm{fWmv zsq^%tF28E(sYsn2^ix=46&Pw?zV)3YYkCe3eeZ-*8fs`HRoNW0IXshFZ zrTNugPgVM?Ltb9;Dsz3F>tcAHc0;fvu|tT}l(r4Xd%|^p@={QyBQ@87#JPu`I3rVM z5wWtMj`Os8Prg5S-CY*HbHhHMd>?tmILlGzA#wlWdMVenFcEFik*DLZ#d?8t$d5t! zW@1!F9qqaPN!^6FhdO;2o1eGD{pTckzli&qeEwMD3D2qHIO&00^VQq4j_Y@vlZZ2& zx=*-H&vkps>bdIP|86FI#?sli9zpCz)Sbeah5F%n3Ggdr-lHvXYIE*kobxzeQ@=cZ z=Hzwmc|iSdw7)~`ycY8}*NHKLm=~xQn;46^&TNG(X``bm`58DvQ#PHv`?MKO`hOky z$?ryaSqi^WKNj`*)lE+f@|RhghvapntOoi0xX#bDj&z*I7{_;9g^xHFGKYcGi%Pw4 zv_H@F4dxS~26p^wo+r)`%AZkhD(4{bt5~0^l9O0Bi4%skJ4(GYobl;H59dNo9Zjfz zm^k+_FAlV^O~;3{Ph|0K(Y6ie9nP=hk9W;I*NNAYJbi|}W1KoJ;#0fc;Ice?P4f6# zp0fNDhuHndJB>Lgk4~TEt}&RxpuP}Y^Y z8*L1cDAVU%1M;(3U;mQVQ~^0A+Boi7->s+Zy9mNkS<7!bvB08 z*4Ju_p+A?*Axvjy{ja|J`P;Z2QMVuUTG7`f@^5qQCUz&<=sSpx zB-B0Ny>kE2ch9|?g={SPQZ$-4^QgyHQ%@jnvoW0EI<$>LtQu(0oceRh zKg8R_^?d4gz-5&CbCxFEn|5_k8=LmgXb)L_O)0^ z%mDHdP-hZnUE;+i9Yk9ljd7@rL+M>y&$9Fy>-P}p+LVQ(ZU`|N(q2b)i(iR)nYjLF zbI(Qj0MehSyMVJh?d#EY0rmdljAC)mkoS{s)XU9v2lDrj zUO=6FTp#4zZZV>gmxKP}QC^vIrLDzF@}rRdoV@XtH^o$ZUt;L!OPqf!)-~#T$R7+( z80Sj7Ox{#Z{XL$J{ltrE*BwarAm&xtH&t65c->ujT2WWWWzMpUX9Ml@a{wKEIgkD^ zo??{iC`FxL#2adTTq531D^q!S%EHrbla(v)_tDhmq4Zq(p8iMtC**DBd}CvZ$-R%j z^-kh+w^%RLkRui6I{J-CzvC$D$Xf7E2R(Oe9NR1|Kc4g+J?Zy5*A=NV$YQCWAo=ZF z70(W?BU|5Zx!z#cD(=a3biGjQ_(AzC@-~v5&NyOoj^jEr`E41?9M#7U^cBnE93?%> z#-lI;DC@~MlaS9p*YG5yZ8%OHA2`!<22jpFz2pB!k?-lWjcW56LD^)k7ZJNU=V|&6 zN1TOfXZ;0He?E1FS({_jsc7+MP$!n<)5LourR*Sec3Yjy#4A9(ip25ddI0s)Q}&j; zNH~^OYba|+Iv3?SqOnGosJDkP=Omqt^CvM&P^Tt!_%Vy8fc1Nk>l2j4qfJcWwWMx8 z^3G9SpZYqQ5N8YNjMheZHE6>>Yw)b5&MK~ToTfYti74=$uh3U79uv zDCftVo(o)8#s;Lx^|_w>o?MqD zFDC{O^Al~pk5>sXwNV<}rnx`M^r|3_I?8&@BTSJ~2gsT)MzMBGfwRKy6v=EOTho#+-TlzAEBFc$qx zW(8+S&K}g)@sl`raT)3L#Cc4;f>?}m1lK2smx(%$sB;HD6RR25e^dU3Hq|J9ilOij zd6_AnNx6<)oU@71gS?KYgC8w>f3|p-x-%^AEptBPiuwOS=6%Dtn0h}bkIuP=YpZIt z_-@BoQgKcuXC3CjbT%hdIzWuy$5$>A(8qS-#G&pT>Sf`~MbLwcd%m?R@kjf0)Lmo& zmRqdF#F#_gPR@eFnMXeVG}4opID;tDv7US#cWHmw;@zb@*&nfUa9xw~hn$1xU&nLK ztkhdhdK2o1%BkO%IzYYFmgg<7|7^EDV^j8mI@_#|k>r=RG2df6ft+KB+ko0>y} z)=_Ql(#DtaYUH=T8T3C+dDJ~gj6T*^E9yq#dKLASQ{J7^hxAzMV-wdut*+wg$Vr_m z^fi$>Gij$oKWp7ay>eE!DE(C=uRQfiTi!>;k(9im;4R_L@5EWdwSL!5#{tH$083lCJLzbD%;hlkyOO74G}j@- z{>7P?`g5q)fNLEW8AEB(!|Cfk>it7`5z=w7oVD-BbxO(?P_Cni<+~L3nEJ&?L?V`s z>wlE*CY_6RJO0QkLo6K!Isf5I#aK>|_b+uG(N}!yXFcg=q)QS1|2@XiW(;j&(q|Xz zw*gkRekxfEwTnaD_{8y{tU1?#_&4gfMhp$73}MbX=#U zUPZ>#h`efCzxLK7KKId&_Wdk&Q#Jv5aXXd2vYhz^(KV$n`AZG_m-q8`-Y! z&^8uzYEt*L<(;>+=uO#2n`1uQPy991$%1jLZcg&ATb<0r(6NhlHEnKtDT_&7TFw{b zpTw=S55T1KGlMw!IEzyMJLgkkJR|=C<)N7CY3jD7ye(xD@Dwp7;W^Ii)V;^~f%*%` ze`tO7qfEya{9<{bDc7;o+(3SO;ya7xh+POslW* z6kNBk^e58ADNjR89lLBzN?D95l(DZOTDh-)u+uD z@~&}?vhly6URTO*k~hctnn>Pri>ba>T7F5|)TNL5TKprLi!dlj&o)qt>XoC!_uZMWm8ed2=znyAZ7ksHe^ht@vN0cwYFq=k15no^E-hT zsds?30h~*zdx9}kr%o?COWqL5?-TzWdHVa!OPCjRtf4O*$w^nDZ6nGCV>{ZUB=2v^ zQxoGA>953i$@$@r@f0IpM{Y9@WoxKYgE-B(e*8z>!Nht(dJFLy6T3cbhI4)=e}%Qr zOj~a}vjTPBQWloj}eKVs&gUOmz+I3qLuPNa8m-I{viXs=@)`JcHCPyP$d z%Z}F6eM5S$%_|;;A^nkj9ZNV*a-E#K#FX74U7J{YtXy@rk{*I@Fe35KQa2I)z^UZv z=)hbPb9UnlBHiEmOUZRh@}81DU}IH%9nWZAh`jWaS0~OvE8j`oVb;D5E}^_R<9Tg; zed9VA*X=MGWxtQ|f5eZkb`~QS{p4f3!>r-}>b0TmH*8A#mt6n2_jO!nkjzpc3HlE}-`;Yd! zn9l>o`<}YL$UniU>EGlmK-pT<5tH&x6kKHtb%-~Syep{V9QAfnzJYNRB>kQAe2h$A zr?404Wj6NwW*o+QgZv}J7^%K#+l%XnT$km#ChaPazJkAx+2r5nyg<8*c$B*F7*ih7 zr%0dCz-^wx>1P7TZ_49HPo2YDzqK*HqU}`jN0axQyzY39wwcNQPAnZ6Nv9+I`>0RM zE7UuMv8dC8nE&EtY(u5=)=u>!(l&^6ZG45(h_lWD-6K7jIMFDJVCxYHOL7(_uN>v` ziK(L=?ebIi0(q}UpTvfo$Ee%TTZ5m?(B>y+FzNY}J+nE^pq-A3#0YEG^(g;B?6TB< zNsJkkUnj4I&9e>HzmMg_3AX$#v~NZm9k*zom3nO`>rIRl8e@#g5!4o!zh@=~Gju;3BYhdH5N4l9%jrtS{QPfon!%x4yPLpf(Lu6wlo{>NIXT?q9< zk)N9DQ`8$|<6li)OUe=uXCL{KnDbNW5t_39h!aeVA=E!@ zu~l~fZL--|uaLje)>LJgsNa<{o|O->vcFYmM-^fxro033bquC{1@an_&d&85d`J0L zuD4(!8{;eT6S^ke{{~rpE$Zob$T^odSxFC}U3}_qBd?>4p*dyw81Eh0U8O7(`DHlg zl2?|zubiQ2_ldI9Tvs9g_pzM(*yQP$&Ka9N4sl+l?n?4&5nIQ8jLf-^wrwa&YGZ3m z`@*DuAFrrWoW6rCrt*7Grz`n>sH20Gl_cGawu$h*#Z!5;KjNLH?sm>T$f;vdDKQNGx&Z8vMICSK2c*c|dhx{{`i+X2qDKU##U%SX#Lpmb& z=rDPyEx#(3C&o;RcTjD~yUF>C{Gz1)4|DGxBT2UBcZKm9vDbhlkayuP;?CZln%V8D z>h5{$-JaKGWo1?6bX8?dW>)v@@r7|zWmHv8XJzK(qid>Hi)~~J4~xA>3o8LaTJiAS zSqoMRi@-t%$!%dI5CUWgu-HE=VGArFSleskKM;Jrzu!3#ky%weJ@?*S)9T7NapJ^@ z^Z1?L`~1#79s2aAc>gon@@IJVcf)s&c<=91Cgo56{!pk#>3@=M>E9vm{RQ6noa;mC z`VsQaxc?@99m;=?zfH>hQ`G%F*E8z+Yh3>zfB$-@_ebgfE0p^&%KQoP{wQ_*r_}YA zDDxMo=MRK7jw$oAJo{z-;=jL4VwL;98OkXCf8m|@@0WO|&htM<-CvOYeUxjH{^v>m zRjyP1R!RR1ZTQ>#{V~cOa{ZHBe;?QQ@09ocA^LVo{(n#X&$$0PysLlz1MmMh*UxGD zF@Gx||G%@R;3uB{U!*U2=LzYDJpT>q{>Q>|UH&!l&#CushA~mzBg(H(?zc(*IM4O( z9ls>M%Jpwi_TS=pm%pE;&R^m0gm-?cQpazG@;^q~|10YM(Q(Z;!vvsPEt7`p;1If1|z$@BbbC{&(uo zzki9ppW?pG^B<+2KTm!CHunRrKSo|kxj#mkdt7_m|0kq7;oX0Q>))d6Pf@S_{UN_3 zzri<`|NRl({lk<$=lYX;=eu~?)xbIWnJACJRT>mK7zrwSh zq>lfC>;D}q;`-Og`)1`{$xkW&e^Tzh2;=bw_}*Wl-1~gvZ}2Ss`w{B?tK9t0I@q_fJrV{(TXi{WNudr&8Dd%6t0vcPaNO`7_dgo3ekO>yL&y zz99Ycy!V&+JE7d4rUFO5V?r_nV~uQSyI_>))fEGyeWCf4{?X{ri7t^RJWs z1@fNqr+>f0dw-Aq{eJ%9zh9=_KSH@lDDw+E`)^5qLcRYHf4`sS|1i)0L-Kx^m;Mdv z{dcJ6KM!^M0%e|%{%3jikJJ8lDgOm!{|tZMHe}9p3e~RbJ|NdX{{u*We z26g>5_3Ph{^Ns(Q`xC#l-@nd%_218M|BI?Gy_e2L=^N>+f1Xd%EIl6$XJ<*eF&{ih zv*THRG+ekzlk{jlO9!LTlm75DJsC~Xi_zps@=9xVmQP+u>u00>ah`nZ?wvcg@7%eQ zuBP9*`<5li^F+!!=c5UQ?iFR;2u1v=x84jnepODaCe%XCPrs#aB;jh`^3Nu>?tW{U zzB-s@pUp?_q_^(r?kB!|@9w>K(nq67?_iQor(P(V+2iC^FU^OuNk1pQm!9+oo*12^ z-1cYr`81uLjV^|3X`|PlQ6L}mG;&Y-`9+!y2FWc(?{uU~FCXNyytk(GSvF0N@_d*c zXXDv?lK0Z-{P>u!pUek?%eAz2KAI0__tRU`wX{3QhEpH&wAoYMLJh;wtj}kADQ&tO z%_r$3|7@O5XR%PYrNB6!ocE_w=1wh~Wl!>S^faHO$IR_yG*AW1)-+G2`E15CPK%~~ z%{uy18??(G;C&$I{OiA7yrIqwy?5D=iJGRz^T~vn99*V36GiW=>~#+`aOc_N2_wcV zP4djAtjwB@GjCg&H6NDc7*hiQ=52arUjeLUKsN9*8J%m4HK#W|E2^K)GTQ84pARc{ z?fkSqo#hi6YBPR38eeMmwkO%s{_HZ{V(_M#<4Jy;_n+phSizQZviWRup3VBl>3n=T z$$B~9$pB5~lf3Cmg_oHh zt+@}<@2=Fd;c-6r?uwo>oZ~g}S`Yl*%daGN9qy95t8b*2c{Z7ndfRaq$$RM;>m#}Q z?bUm4CQJD3BF~>B_uljp_ug84}967Xx`auHom{UesOWJ26zaXv=XOl$D{LC-d_d-wQenWH$Q*BtC>8z|#u|PA;@&&~t8IVpB)1vE6AtN0pg@X#x-#RaVVTT>ov#(KO2 znUHHc#Wp=xM*FF*Xzc<;v20^*rkj z*3yGPu2mnQW92GzoaKYDfMY$pzRvp0nCRJiE1w(je|1Fv-1+PmxoN~4``b}VzUYOcX~YOk7v`{=|#WCP>{%H$7@M#YkQ}*-|R3W zNo{w7WR2@~qpj;6|4G$r`)Q}P*CJqrFjUeyDFAjo{HVGM(%^*Da)>KOE0z)1(H47|(PO_J%yJ zZ}o@5xMa;BA>oqNM}ztKkn+7=VCsyl1WXO{vzEryAnKUr+3{I=Y}}uy>G4_4?Dx{6 zOK|*2HXqECoKM9xs$o#1{%GAw9gRNs)joyl*uz17!m_n5+w5C%i?wfw>cm+_Qw#pE zy=yo7`GsGZaZ7XnQ%hvR9AXJzX;pWYPDWlf13W+`#l7LTBMAKyP{0g|F)VmPUR-Sr z(<5G;^2P#NF&}16Sxwo|ATL(bY;p-(n1R5AB_`G@DzI@iCX@=lW0ORTCs=nulZEhoYAbetcnCMG9` z2~AlWuuenuBF*AELcE#riXx7a{1kLOVbStVK-H|hIS|0q?*ntU(}obs?KE^ME{q;X za@H3VtRKveSn_E*XJF_94a_GaSfb;6y#{LXex012WkbkI#+02*=x$OwWi(DtX@W3t z8^psc{D}XagYc8ur`hLeKAF(Di!+!Cy3rHd8P9(8DGbl>RL^aNq%#}u?}teJBw(`FE| z{Jo;s^&cx9votDj_M|^OhuLd_gh9n#GXS5RGcki~`b3u_X3Va%PuJ6YV)sBU#O~Jg z=kEMG3Bo!aiA@g0-k* z`nm@KCdgfp$P5toCfOhj%!f$zMV}g~>_Ew1i#%JC;V2Bk0_PBUnqHODQP)Nnwzf3x z0q=P(D``v6+W341OYTcTr9(aoB;1KnhU;1^WxQB1Q=tvwf0XR?PflQ#xXHCFwIGCQ z#OmY_ZCf1-aOiLxS+QNh)oQ7FI30!8jR=UOQg>2=I0N`Y(V7wSZ31ml8}>$%3Ae-3 z(Lk3zfJjefl5q_O)1M)z8KR?A4JlfcJOpDl%rD0yRxw$p^US1{jcjr>@2MC7KfJUS z#pOI63+w5ZoPj2hJ23uu(g)%I6v-P?L~l!6^rvSU5gLq;q3*%<7zW6vAKYBLDyLM} z)pf5_I7$g-@cK52;y_)1(wG)wtihdrkn-tM<_A(ts{d?c*C)~k(4EP-U|=*swnJfH z!@ZQ-m(E69g;1A&OG0P{<1m>we_->1LN^2t%w z{}jx=QQN8Q)jGPiYt4PG``f#<%|>U3Bs|S#i)ZzEveDSBwGT-*cDI{{d%8A1ZgAPx zOO5uPSf!1fL$O^Ot=;BBxT1|#2X@Jrshvjq2cxmE0!3!aWS;pDIhT^N8T~A{K~Vi*blN|T4?tA_>NrCW8j8-qwuDLwt5)M` zC~!0u1-xy`ds%dXq&!6`Jo{|zv_CtWADQd~e+){#Msz}L$^%mZeEQKmhiP=tq98mO z2u`{`6FDJ+Mrq)x#HXn}QjWWYdQNmvvSZbW75A#WnSw^7^;k2t)fLLszSZ8(#&HP?L{dLfV6OPM)?gjf%=hxQ$_075Yhb98UCojO^OK?(zV8r+E zLInywSw}mtgB26Ja$WnJPqG#O1WadID43;=4nTA;LhoD0ss=i^p`%};qHceN=IHwN zh@k}Nn8G;GbQP}Ulp&Lt77UR-KrrCf*W$7WW9TeSfVnZf0Qqj^nOi8E;(u;v$1-@) zy{hVOErpYTagCy+1a(1Pi4eocSubQe)uJ=Nr_sI^^^WUz`_e)2f*DZI0-P-t59*GyMqfHswFI0*&`Y>0-h%OII)Ecat_RYU9 zQKpWf=SkF6%E$XU1Fsga2cNaK)n(cP*XKfiSlra%#FvS# z>N%(BclLH!QH+NnaYGAe<5B5~yn2-*aqTHWixhrkrnOLWTxNM6*VY)b_^QTJcOq=f zgUJ7rLlgZseFTSs##EBdxfpm8d5~C?Kv$gJjfs0P@dgQaO=KFbsLcCQ4J%1AkjIor zQ&$`|E6MeoS-2Ot&v6Bvz(GA!ML1rUoL zKU%2C0s~Sl>s(7U$8`aysTS%)xyMpmH16M;Zb-(8fDv?Y)3sZn12IE2osM8v^YhWM z)N02Ca}#X!u|(u~D%nGsJdWo!dMuGSccbC@7Q(-a0eW>h2YaR4qmkGs&=tI7dgw{! z+p>_IhL{KRv_G7qg>vJ$quedSDDja1%9pLMaeO2VnqCiPuu4+o$H;Gv27`|?@=!Lt zXxR15a$h`BO&aj(bEadPNVSh+DP)+gp z)?_YAB2!->R1pozS`68AEFq>utgl#sAZ{L^0Kmx#1H)g z1zG;xsM*-Im#(;%BB;N1D0ZmXd))_0(5h)Pj3<^5s*NC`hcUe%x=cnaLcn8wq#yZ{ z90M9|i}FiEvXXdQN&$!2S>xi48YCiY8VbQ4AIWwI&r2~}by&ba|T z^;7Bv{MIRkJ<%{_GtX|yWay%~Jv)#^cjC{myr8qPY)fj9JA0d9_Cfp_0{Z$C3SSmH zPYabNTx+5JkBasDbGfBR`Tw=5bla79puq3L72&KR9~{-B{$J8A^LN4&j_b!}eyqRT z{{_&=1KFqUOr5W9;Elk1ARhw^C9T_0Ukt{Ezl zDKw7TL3RNPqy%1M;gX{JPdn(x<9%WC^kV4&>c31V+-lUD#x2C+@(5dcY^HxSa-v9Lvj&wJIF{-t>VJ+>92Ai-%drkZ;{W2K-`S#|RH( z84*vjnGa=b=2|K)DrwvpP+*zjubK;9E^}R_#c-+;`8CPBvzx(CY3$LA4+I0IL1cYy zj*hFhv(ZS8`%|=Tc`EJps;?JgK^F2)Y#lA+N2uAuZvvsBsOO_OP7Pv4V+ENizNUg+ z06WHDp@Pps1uk+G)dUqHJ!2WiTqnhgZ(#MUr9~F2#o648*Z`juAgDfI zECpjB%VytIOfgU7;MNp>QGV#HR=v3UK3oyEg@Sss|5P>?!0yw&JSzGL;J|3W!idL8 zUxST>QU}Bar-HLu|M+!EVT~7i5fc?%)h3o5(+|c3-ws*s;UZ~CL`e|Fqu@EzF!abO zsAl?73Pq+@o5N7{Umu|lJ`)fvmtVv^a}=COqt@xB-6neFq)|V_ z7{zt_@j*9f?Bc+)`_OZ6);XwcH}|)b#z%*>ZVMyQZn}Ng+;7wpynVWDT|3>De0Lh% zoo4Gmi465Yw~vIBG>+#P7Sp7`)Z0(sDOzS?n1(F1SS3JMymDvomS9*3whNR}44E(V?(-I$`h1ZSj4>{D!$3fS5ycky`J{)+M2= zae9fbQ3KMI4W4@cWPeT?P~TpvRS;Xk(k)!5R~bGA zA!Z$*##_jW&x|Ng45uwxhxx7H9xkt#2f!<3hhqdn%>8SZCGp^XGLuFO{f6Q`q zh*5oJ(LV}r!6br0u4EK~ZzyTfEEuVR1LKn+ZYvNbhU$`jfEbu7!1+ACDVVX6Q+NgA`xWzPa#M_8C$U{}4e41CB|ssT?Zs#y#ChOLs&jY7GtZUz%UkRO?RdAPcb z)D^@A)A8H3z2o>yQekYCt-5%}Vs^hJe~M>1gu`IYOf)nya6~DZDoq}&UWAk?#~Q0w z5!sE8&2Fsfj1^jhI|f*z;_Mio&>o#hR0~C3e=1{YbqNVQ{2qJ;QeXWFBv}0|;L!~T zGw#(%*Hmq{nIQ1t1!&{Et4KieX==bCxgy%#jBhT`xq<1z{2Ke~9=#5) zS6J>v{eQ&W?6&Eg(s(1^~>4nU}O>+fn~-Op!y{d zA5gc9Ji;xuD1)R?Ee8HJz36LFvWvSHig;ZEFS=IX8Fl5F;aSkp zU)R~{SA4+~aAIWQXfQf{Qd;P>vBX9Z%m*uYVnU;XOKL@J`%eJ?tYM6RZYhjPKgrB5 z164OKUjru~s)PtrB9y>npf=4xHR489`IENk-*%w29*lHy$kOniK!`C4Y659`l>Xgipk2A6>ZK1cj$~N zvxL}fTRYTuTWjZVDd`EVU`>J%w5aKpDFmvGxt0)q%@t#HEG-z%3z`B$#WpQ+;WLN09H6y|foZe%9t>-SL+jPg^nBwwk_xRd2x#Yq90 z1hE0dRvBvdgaO~%G^yj&u3lRy1amx=eY}FPF?VXaUg+c3uHprQ^ioZ*_g^qJQUi*p zmF#hthAQi44@z#Rs% zBOzo6s-s*K3$@rG1WXHSSEiphYRm2L-7){5n?Yv_^m_~c9N#W(;B!k7yc zB%7Nt;T2xur6z#IAz8vebOZ>6cA3kNG>sE2yhM{CE0&{FZbN@;*0>erIg$T&c<<)c z8e&ZQJ?We)Z=rREob?gjx93RbS<=8&6G@mW`B{P2z$Y`)_h${B=Xwfg{x#HXkRyXFH^-s?R{E2Zkp^eJelqqM{ z1_%VDHwiW%*blo98uE_R@8q(F3CZ@1`#sZ9QHtTdjd+o01#rC7YB=K3}}G$US2n_ zK`NX2Z(NNF$ic9S6=D!o%K2Hob{8#>0AYke;5x{^=0EP8CIQt4)+1K)rrW(lE>VMkj$C_L!bd|x@ zuValtI^{F2Jh6h;}}|UApS-m*8W_0M}alC!}Ze$9$rv`G?W`Q z*9lnCe!~EU8@E&>TWo{rmMK~`Mb$gbKM#N+ZE7#d{RGzk54`E-*6>Z-O{@qcYi*?XHnfOwi zc9lA}pL8Re_ObgaBe>*L)2aDKF62nY^^B#>0#*fvX4@w&g}-IUqT=I%znV}VO$E8Xhtk+R#kFtQU<2CM$9P z))D|LH0D6uC(eOZqFlxLjvHz0L3czf120q1NPAEb<-=nT1?p-es#XG?s8GIm5uq@{ zcA9S7J{3a6iULE7oXD}=77WP^s6uUYqGrXfE9Dhk_auD7VCM?DQqAFs@Nb2r>r1}< zZCx87G@SS$L+7-|Sr5anKoFIKFMch3_kW3@7|x6BAI2HV{WEvkWlNbcGbu}}0skZj z{fT|o8_oXv>nne({Uz7brB=uW4-J-QgZ0e58=~nH!7X5?7xYr`dpGiV*5inY7Z9}# z2Ih)n3po)Vs4cl!orMd=!NDclxnM2G$Mhl(tSw;{T?nqzFhgRQEId{%%i$aQU?L-7 z>IgZeF#KyTiGB|kFy?MITJ3GSw%Nq= zI8g`)a$CuEyU~Dz>*6$>lx>G1%EMm5Pq(pGBk)787W-v&quJ@y4#|9M)!=wDOt#rN z#DHvzx0vW++muV_iaEt1-OfjNis%iw|AfmWSKmpFXOeubl5I?h6v91}AJ{hE9J(jN zk;pd_e&nY11-O`w2xq{v9xSZMSqGER2{;}=hn)=@NEd)br7LlZmTs{UmQ2E8$(lu7 zm@d7r;Ei$RnR`wwzXRj7RB{LX(^6I!{~Ph-1Py~@eFr{k%DNG&u-L3a<1dzTABq*% zY%O&5kwpku%B*aDuS5k)*`|oMAbcW-PCHpd4o!c(Y6cFW&eF%`79KQnxdR2M%;uyr z$}*3h$|NRzDP*vaMRB2ZNi@o)K_YbuEwvoPT80lcFpASS(ryX#U*aSXJIpu=ax*j` zE31MqutbkGqHZ8S6g^363}USuygP-#ma_1{r+2SDwiN8OT<`clC@APF2_aDE`lQh zkQnbpYM8-WZO^lF{lJT7;LjjA`ek(kzp89b=A{<(POXWb=*~{E)7sxWY_rRn#CH0C zpG4YN`$;#XlJz7qy!7_mbPoW0g$|6|DnH3Ru*huCjSomTaLteFX-CVaXy;!)ZJ_i}u z?#F7Ld17A4Sl%W_m8WNENBrj?*}-riQam9w?9E|ClsLsl7b|*^O2a<*9RiquGr^me z>$sWVMM#+o_A*%Ei?oH!iP0ddJ4$xu+TB>a=r8^<&lL?GXcB2Cm;d}N@yHf6)lhpz(}%Q zi*+hu+;lcSesY_=$gF2k9n)vXt_8~m>Y-~OD27s6JYl2aWy6~8XW)1zs3gZ3u0*~Y zu#PhT-vquGpx19#cEw4Vp>MHG8Y=oZt$+rGy>bM&FzLilT6JBP5uqTxFf$c_0!BJi zCRtLtWP7{PJZ8`EISP5oD`X6QR$w2>&Jon-Tcht6@Ci7cx$8r6fs-x>B`Fky^u zXgk{3>h8U;FHC3;+H+l7lcp>yqy98;Da(G5M~Ea-Ch2m#JwU~OKRmK@%8is^a;mg_ zWWp25gS`$H0}6dWdF!qw3U|hc`UCuul4kHIC=%`*3M1bf9uMZAFjhid-U0m5&dL2< z3Z$SfqAXZMugEbp1f`Lpi%uYKgFHbu*33fsq>MC1&28sDY9sar1nARXioD`G6C*)sRiVj_0i7rz z$OiJqa*+yFEiGo-A7FY7wl`>#B%9B8mj`wi6)fSl`e-i(2~=6JIu6ApFT0Q}#Lf1I zYTo)@CeFq~m+=79EFq$)6*UYO#=(@C@m323A=S&|8cbV2ay>#Khs|Qgx|{6OH-9F~ zMRWuY#~L#=Kn!v&IhO~c_b9hI;ZOCw+6 zCD|WXltRG>gwh?9jdk?~y(~16o@2HN7MazlzWE7^3;%=m_b+f?U-4C;)YD%C!$s@u={8pubCgbTiD82eprD z4|XgF--E{f<682d*=}wS(jj@!>a-rVk_U&6;Es|9kK5aiKlXASaOXkxEPHYWSPqj1 zObcY{Qi;nfdC;Hqj{w!=!Du>qI!YeQFJOO?2bZ|oJ+l{fYlNTJt#uWAX175o8zjWt zMyJ)?X(hW&qSPqAxj}Pwn*@*OHugK+2Jvflo86s5ixjwf_?-p;G!EO_iK`i1n^W#$ z*u~F!4z1(yXv&Y2%l2CpY-7fPP#ZHB1zI^1Qvnv-H|~IzE>$Nt4MDz?8{C2b0+F2F z*R8_9>}D5~0qlKq#d=43^0kd&Hzx!b0+4+g3T5*2E&$uGB6F)*9>mM=vyU83oanDW*U2b!_j5sD{`bW?|Ze zu(Dx8ox-&S>@17H?r2U}JaO#1^Uv9wguHp0?A7WG_&6YDkMJqmwNAa(Cb?UC)U?ZE zF?if>HXk-RN?3MRdF{?lZFjc_rLtE$#0lNN%acu_m+UpZ)2z3Wy(W=PoLSu4OZHm3 zo2`db(b})+p~9pn%p?h5wXxk+Ub|JdXCF)T@zG%;*+WagN0U8v+CanT+a7|-X*LC? zlEkvbFB_ZscDWRZ)4dWywqg!XkujCi!U<MXv_#eD+l0l@uh??jl#PyXOK@{yY1y>ssofUTK4xHF=@n0H_f>py zXknoJ8PaPgWul#+3Ej41XbHn!YVp}k`5s={->9T>vy$;~;MBe~J%eNxkx_VXX{@{P z1^f_2{0x#mV?*zrd?1LBf-*rH_VzNZQG-5D_Mxj73G`=vA`}gdDn%A105s&XX~aV1 zn$k0?z+P_Sno<-h7m+lUg$E|jFOxk8F5#^FQbk)u&H~;lau*R-R8#K}f>H9j{#Ah zv06zG)@JmSYG5+d0OUpWR9m|hHH`%0?pH7fVZ$s7;N-y>gv+kQX2r+QIZzB@hJVc0m{Obshz6r8VXNR z1jF@Tz1wPccTh=akBp@o?fn#N(nRxFU@#s$sy$9jv8x|rG%?j#+Jesp{zg(DqgaU; zjR15Y(QwFX;9}&Q(*Mv@Vj9cBG6XA)LJIPPd?+&oh8n)nm*RDw1sL20Bd1>)%>Z(S z53Sd}1xA#A)>K}HE}aV=~EsXYE(dyGi$v^@nH~$K1Pqj=c?(bHMr1?Xd9Iw;1B+$;kNziU0^cF2c~452Gj1vI0}J znNNjUz_vBmAC%0R23gtklfHU7d&g70W4@Y}7m8aiLHHg;!rlpc>s_p@=9ux$G6W^b zK9kO#v^itjCv>U*YVt??PmBF!%*4p{jO!XW2-8{EGPOz96WH`(8$s2lB7)m8qpt8q z5~^UQ zc&hKLGK44C=w|7j;vno3a0zwVNq@HfkUfG(SQ-{^DnAH{z#?+=S&U2>?&=vQO(^P$ zKitfo2*vsh8{F}5u{6S33i%S}Q;;)za3PMfE6s;=@z5A@*->a0ysp6ZzNeklmX-p$ z?u<}df

          kC+?B$(1w7iql$s*8^{)JOv)Pa^vcmDdc}Qwl=WG@&9gZZ-nM&J#sA{L{tG55>RkE6tyTS)hZXe?fOG-ku4Ec0bN?KJ}$QB#pRyT_NN&tVZJZ8 zed^Hz_MrtfTSHKyqxtiUIFgK;IX6JTAw;1@-EyoTW2+$3eva+B0HI5m1$FnFc*xq(GFfU^KO9%N%;iHmm))>3wgXQz{Fd zmnv1o_jMn3lxxSSY3qUHES#y_S^*n!6=d7C0~qhZbNqWAa6Zf~ATO z37JCAYnF*PITCUbZ+?ao?13W8gs`@*vke%d#58ieisGLRnGxOzh3Gj$k)?q;fS_E4 z5F$+{iu5pJ?<_7N#D5F1Wp1+o^@RZfKJ0@UCx53>fs{r)vlx9^OdGb0ER|2_W_?=;J=p z*mchUh!No4nNN(`Y+IW^N*T_Jq;S&P3 zMDP(xN2{VeG|;XWpBffAY6w<<{DM&~Fv|KkoT#`8vmvXL#r2vp#PI=b!pp_%T0W{0 z@aJsg(V$)!nXxY}gjB%>riqk#$2}7Z@CXK9w^zlbS!7DDaHS|Z510k^J0lPQ5Zcud z5Jq@UGwF`N$9DFLnl?dE0@H7{<}}7glo~|3NW)CpBVI@^z8Zboc#LGiyXE4qe9Adr ztwrY4ot{Pb7lLg?QfN*M*A$akwxA}yGsP&VV)RN$BX)~}X;5);QG~>g2O~_E2WYb9 zGE{nk6`^vB4SGxk`LnbghT)PU$edG$^d4oR9NCqE$rw7z^#C5m9eO#r|C>vly%je@ z*^QNgS<#E04sl`x3<7Kf;&OOw8U$*>Vjxy{Wk`{|OjxZGIid_JK9r_9(!dqo_IA=C zvu&R<(&cGfz%0*|rIw6br;6%qM=xM3OC^~u^c{q1fm9E)Lk{B`I&3B(VM76Kg()(J zx>U2ZYMK4db+OF`;Y!B*6(dZH8Qv&5B21LCCNpv@8vgeC^_MACpcP6Xlj(>eXDg`fv)5iWE0Mu;B}d zAYq~x9#+`oO^<4^__`m4QPhZIS1>A(HP$f!xxmhnmr<=>Mx!vbCAMUE6vfxG5tQS# zgSajIIQpgYwV$$B^RwDC8}134gcJ9QS>c=+Ag(QI=|{D7*fjaA8Wux!PgWO${zq+J z!XM!!Hc37LMe+woN2abw+$WVE5nQz`RV7wE&PS1Z0#>_yj(%z5=`ae*Xv&>*8HlLF zB)}Gs!ln{Qp-@HX39ehn^Pp*^5ez%7TaV|)v~!8N$7e`QQh-xR1WJo6NY-UWkX!j` zQAR=Ibl=k-CNbbFCJfmKk=Q!ElB4!Ya$yu04DkMU2F~qj9BTK49EvF?~Tsj_1F7B->KN z_q6;=MSjR+4CM%;5;GJi9G0f^40|Zz!}=D;4ds?cOIAK$W6uRXHeklNSQa?XcUw`; z3|`?%AN_o|w#9j+?2KX47~nf%ktaoHQghO2qoN}WdeTPol1C)z-Ulob^Jr?LbeA53 z2=q*#Aizbhq^;23{K9JT)GkaCs%`AG9S%6_rVpCkZpRKK+iyH_tKK|lkbAh4Jl~P)4obET zXT*l%&?*i+oyOz(PGc96YWC!p(r0EB?*WT z@(mTJ2~}8==4Tl43yYWrwXEOWcjwple$F&R_wWAvt0q6c_j3*07YFz6{XFlwDRVd? zIbzvjm(z!g-uBu1+mT5hoRtF#+;AG2+?F6L;YR8$vgi0SUXqyi`UFeGS6r><*a`gz z0~C50&k@Xes=BH?r`QN)?>-jSUKY1oX++B`b~ji_D2{Ae3(=wNN$;C!#B*W2Qa+}l zADq`$y@RFbNp;FuR0`M0-U|1a6C#{l_u#8t>54i|tpCRxT)|OStaS4c@v zPO3X0#I>VzcakmhY_viNwnv5sb-EgkPYpSmt<>ps$O+tQaR-ML(^LxNc&#l{r(m8G zZNNWU`$-uJ4BwU-(t74L&}Vz zuZ!=5?u3S{0aeI6Vq8p_GPMsey1}nk59FTV`8Ea4{Majt`*A|e0Yaq5)I=4BAHe+> zmtoomt0c1Zk?K?j(A4|-da!vj_ljtspnK7%q%TKXcN#u8_E^0=8xieE>-gw?zawTew=NC?3P4>y?Nwf5^4U?uyiQb&Qx(U;Yd= zZk;ihsd;C`UgP`^i&;$lVtZZD=P)8Gfct8d%jsI6gdzcK0TilSS6R=(S1RE&2=#>7 zQQ{RIu9YAo3^2?J-LdE3IPHBl(DXVj`j73r4j5KbYQ}4SvhY27V4E73K`QKkL&d1k zajdxbs*w2AajsxyM%k7XG(7D71_zsz844ATO*w6Vf|kj-!z5#M0*-@_c zKev*d`3Xsbub@3CqnCs62mvm;rH=UVA^F;!F+yfF0D!gV^c%Zk9oySm-`re(%s*=q zX>xS?^@nb3rui3tu7}WtA?i3i?5z8t!|ocnuyfH`B399Yw;Sd)3?3%XzvE!^^;>CM zfC7l!FeZ2J5q%a>%(p6k`#!s_#^1nvjFN)5OUEMV6?1i^Zr)=2qTUZ-!jzmEaJcE02z*_EIHTNQX&3?jVbOQ1SUO$= zyB}`FG4#V#RQ!X|cs2LxXa^^KNr~Sl?_k30m05J%Y9t+1?@n2@7QsL)v&dfz=5n>~ z0K@`d#y21vs7kKG6gRzL=3&7Bq)!_Ayh4k9^58cy*Nm zCJl|!25yv>5*y;uup&@b*hqcDmSRPkR-T4x&5aE{oL8&0V`o8{*Z{0zV~l{{Si2;S zzmk1@5LrIz#f&I z9KK+b(bHGHL%&LwxS*IS&V@0V&}%CNuBG`e>F`2Tu0pXnc5aF`1@AO-HR7{OAskXE zMNfjo#?W3oF~DR129zm{l4fs&4pTNw_r8#WqzMr!BOuaXIuCu66-*{PsEyc7UAM?` z5d^&`N-;MBiH|F8!ZU-tsEjM$EA?*WunHuxv|U^zV$L`S(c2 zLF@dD>oFFC75Wks?htAp-t?-#k0EsM=bu{v-R#ssvv0fnySf@NZoXrWvdC6da z51I;BFu-CLp6xBEAXJYjl3XK;xkXV@45n>JcvW6~FV`q@STC9tk=FOoDz8WwH-K2^ zYG{YdE=EjT#aS+H>$Tx{dTi`U)N?q0SjGdh)o-i0TnurkSa(lWi(O|OSwJ!BhO0+1 zjM1+=*ZRmBDvYG^h_Ldr@E+4*hNqb8q)vAhXQ7jiNt=|)=$mQ^72r8?tP35Vj!$o6 z={O-=^pMoJck;T*W2w;IBJ8YKoeXTXDLL#`W&$J#FCG(5*|2zN(LU_CTZb35PgTGP zK8pq zD3kyt?@H-z9yy+m z1%q*Hgz0#Y7UnhIDnRytQ|*VvepPlJArJDBEWU(19^_JYb8{iDys)jlxOaJ0(WQzk z-)-L^kSlCLx7aVrgn@dcnvk0K_?Y!63?<8~VHw*Op@s6|7o%RLDEL^$4jtG5FIl*R zXer3^E>L1|r&O${m*%P%lM{^!zL06{1UC!y*={&qzPu~8{`$kP_1ABF>n~e$@msNt zy8P&bYHn~S;qaFmjo_A6szU)zk9EqcM*pjs@MFdwpNw=)zZZ z8W7$b()yZHx~ooI>*tyvHhRP(f{cn&voR>40%4i+fm*Dn zDFFELXYfnolmrc)Y+`~EMbhEcEc9d0i%UP>M zECWlhq*P{xMIC*bD*E_RYMAs12rwixLMLz_MZ!rSC@QihTN;frHri1}RBr>C6z43n zpR;UdGCJUffR4njEX%?vAtbd+&ULjRgJGD$FxYC0th#Y2olts`H}4L+A55{ zaJaMMY8P&zLteE2)(Ssqdm(eFmNfR)zhgCX#t=$E6FLFQU`JZm?6y#2u~iM>fasPM zPj{g})8e`@7u9c+ZT7r@k!bS|=I zeGm}SOaX?GohHoWZ)S?N-7W%iFc2i}P4>v$p9Dbghk=o*eEs<&xSxY(Ho`w#y#AY!>;g zd-$-ndzf^Ibd8HHaX}3WEZ?UO6_Afy{NKA-Uw&MEv7MzM2y8d|v>!I3TDVrB4~h++ znYUn9XUW1qoL(kf2_10dC<_7tB}>|F1%2(ZRT8ZnixnORzbxZ)^dk;~g{|cMqkJq%4RhbJZ4!-wuS$V1Qq&)l4TOlHZxa*@Yt)n%8)1Ts z^6vW7Fvj~!r_Uj$>UcfmI~VyOvOvGp5cQB3*;G4%qH-fdtCv1x8`X`%*qU1eY7BtK z{8|0|MU9qxmd%cb@l`q{`Ab8ckvC+G+>L$>g^2A-??1QxYc^PZRmHR+);r6d5P%^Kn|5xj^DEo>^{ey=(71^=^h3)G zRHQjA;WKQxvg5q?h^aC)9pyGFWPKR>O6VfzZ^Aw`|4b>ye7|r$tx}#cqJpTK(X7hM z2&8O>xjgOM9yM$=-ul4dLcJbrYrN2riO#H})`Aa4E0JXX2N z1?8tX?Db`17h}o3CLNz4;2!h|iVZG+u4t2`cr28mp^^{E`h|zY<5xV5_=Z?&>WsQ$ zI2y*bUo@P>;ybNuA>S>g!=m+r5w+6J|kOD@&sUr&_k~jk&<}^{IrcM&b=U5_N7RA0uK~p zFDwmJwIY{2V?7I!>I>cqUwAIgYVobA;VF=E??BJI6uD zOA}Ll*XW#!p4PAmv4ihgIG4mYLJd-%?JmNiirD1G>s~_ut+a>>^r=8lH;uJwV^Bu} z^F9L~!t2k`{#URBKK05gt&BH~qZcbc*}%v&4UryPSLWp67h#o_3oVcM8r=o=h z{@OPRoI~L&t#N}K2ckqptsK2dL!OS@&@!m=%_k9Cy`l|Rcra<72ORg{mFSnrP|AW0 zrhhW@-J&ZxUDOGmm@Nx5W{u>#zsH~KLv%gXJF}phuuFj(#>L$t-8bE0aEe!rd?IoP ztXBa+fl*|tAZAurU81~^#4C*JB9|$h43dCTUAODoyGGRX(ck^S=OZU<8zJyuw4#bv zFy-@!;tGM69!GY(?>S;yWL86`GI8_ukxqD~`-M1A#EpRg3*%9kO2xCr$Ft!K5V7p~61C~Z` zAXB5O5 zhY1Z*aSUSw$wDNmHvC03s0D$K0(}*tuE|_h*_E1O*BCYz(xJIZ6rSMd2hdgaaw1r&|Tq#^= z0cyBkuDa?3-TcP6l6i)S#pHv^Wq#ChYRUgQM8~ew#SR%LJ?G`sl>3(ct_8o8oe(%&uYh2``JpRjEn_{A3RyTy>i_Hq^HNM|doqc?^} zwhtaxgPEJ&Jeb;AD!%|jk$MtpfMDX{dnvV}8&qr^nbRA@D##OtZtMXxDi}6lzs#K> zg1F>X(? zwe3OHkJ%d7sOC{@y7+=9j-xF~-P$2oJkM=1exLFwj0z?>b?@H5DF8CyH zI7^DXV5NFm@p9lOG^H1q48~YSvNcZZT-O}|IjH&*6z^0DrPeVov-eg$F|+Q<`)g~y zL5;A?5+0BmCYN58Q!6>eXFhsI;iM9J1%AHDT;TNM0hI!7DD0ThhXsc78lD8~;T2Yq zO^QWakY&#ME(W{8+7VqC(NHNzB3)OWc6D~QWoRFr;f(cNcr@)b zf!^793SG2@e1_@bOg3Nx-m**F8#M`$&e{j_shAMm`GixP>>}3(-Li|zHE;jr1- zi?`Ui>|y(mV;CMMhaYb=f;H{%lm=(X;gboj8F_LD-#JOYb??sYJ9qAcySv{e0jJ7n z4$2fBqjoxLCFfQpedXZ-dR0M%7{bxXk^qN79^l2)2Q#ayJSX!3(8b=KcpJyTPhmMk zZLDAlil0Ebut?4-6DSPEL$j5rlqV!+m*EtO+$|WBTwV2Y6Wm2D!s2*`QGpvhP9%8=t10%QUn?FZ0XdYC7yEoPMf%)bGAUKfteLId9?ts;rQ^XIie>^3ucy`C5O+B@?c_qSlj0W>BHn92b;0uEv+}Zj}t<) zG(JA$jL+m@v(Y7r3Re!NE~2&ECb~1{!ghA9oEsVEs6Z)U*)#wn8PpNt9;_x7vMmwJK`}#sWXjBHMvPp|$PQJ>8@o{rQ6A3WM8`dj+c*{#P`5jwEjDt^FhGDAI($b4cy9P3S}DHq_% z46W{|-@=rba2JpLD!riKsk|a-IqlrX7nL!vQf2f)3h%kV1@=c=m*+eUhN4@9nGXIj zDyepGig)2}$mAhLif}CF`{Y?+sLaD+BTMqA*4~E@d^0tEuVi}}S85pFgH3Lc8 zXG$yB#|laeHHwjsGY3<*pxQDK%XEcM7EK~3Dh|=jHS!h+)QTHz|B5f1zg(RXCn_{( z?Pc1*J8H&PwxW+z`I7ay=R%mn7mb072L+0vz1akw;51&pd4mXb8(O8k077Wi_&7Nc z%lo_`!Xb6Z;`n`D2hH2NHOi zkgCqBg=s8-iuR~81zD`pzvUIn_so`>Ji4^wo|DH7ybKe?JV@+NzsCyML2{};I9UN6 zt+cdxm83JPcf$8|+eU>9f3$=(e#fzt#!p)W z)xEEN$9!PJ$bPMNBKCaQm$Yq3Y~ZM0`Pyw{$x=f5LLAcVmUY#gl=RMnNr4A8};Z$Fvjbepdq&dzfv+F!SxVI z3=>5Yb3uD}D}3B|4csx@6am|Ej0dMR%LcznFsMdUyfRI}vA{PbS*#YQ+HlE7*kia* zn@NQW6*v|S3g)Fx5p^=`5HX{NJ|)I*sR?V}9nx6WB|DHVd_ePSL#58#+%GLVfv#!b zg)BUTqi{u>q$jtNBnC%(hA z-i(NOH#o>wO}_DhFTdUiG`0>%z0R+UJ4`2(-T%Y7g_e zmiR*Wy@kOu5L&KQ<`vw_kPc#8gL7?PQWv9F2)0kmk?dhYYp9dgc5v|Lh|LiyL42Ih z75hend~(~&8t8h_qNocMB`0zjY!!jk+#u%QJiX*lb@pHx=l;#~mGp!3Tj{OzpW}d8 zA}kpM$L3uN-fEyE0(l@#EUGu`rM(u_Hdp+6wG77^757DYJbwb$X-B5ll8>8v8?}u` z4H5_1{Y6Mil%{rCf^s~esZPcml8e%HL;oiSUQ;XINpm>;A0rD&{_oxl|qnFTBW*EN=vS&zNnKBSONt7St)^)LcD9b2eAs5 zh_|HzSirD`yxhING?hSvwRuZsWRNT#?uL(s30qoA-T5?;#`R1CFgoGC5Fw7ryu z!`%>eORol7;!=e%cYcIQ+s>(wZ+~JA{t2#g7a%-oJsq8U4ytXiK*D035C>93CaG#p zrb!9W3fbUy;!2L@GwC%-_L3DT*wJQg1CelFqWh35v=AXhW2Vv9klFR}@^bb3e6`1M zEt8Q>8dz=iR)c(de~D3edUx&ZwYR^)nF3faSNEo;{od-v{B*k79o-dQDhwm8pf}!3!>~5`o zyDX=caSF|9V~9I7?C1UT+eiJ`H^89m0$bhE>bsu~iB`ew^u2rUU@lkky)~irQj=yq|u{zm~*=J{y~m+`9WMTqy=q z^QA~{-P7GqeEZ&AV4+YZc_DhI$H^`B>47@M5GsAr#~Du;@c9>m=U@6U7-ZwIiSs^Y zPd$JBCB_F%Sw}+yE@V3chSBpeJRpVGpgBvQj{1|NIY^N{wQ&R6kg)cof6g$2s=3e7 z=U>jAf0<66e|fCY=Zb?>eoVpR4$B(TR}9s1OY<0&N4& z4SCN@@@G`zAa*<&_id&ZbW^Moz^J#vzDx#FgE#+NJ6)-nW%sGpNmQVVK^Kb1G4053+EEyII{j430*o^&b z^(ki%(A-lH=3EvtO}4Gn(GkV_lF#fLYssqv!x~&?@4(2gGSzs@)xk9@S$T-|IaC=} zG@TPLIM$FUv^E@4XoA_xzQX2VEkS}C2DPu{26R9;j^u7!A<5mD_DFg!G4%03P9`S?!C48#+%6-Z?3+{?`HDmTdQxqnY@JvrZX@Alb1(f zj_I^v^{uy7-+nWB`z^JtK<3dK?v>|%c30;Lc%6#O8^B*j}2g0EI2fLRIJa~?zg3WTrixO>&ImC8XEx2D}n&Cix= zzBNtav7^mBorYf9@1}T4xuWBJ{Ky1`qO2n{LyEE!fHB}Wi*sOVIY2hYEfuu#qN7QR z17O4Z*B!Vze>!2g%rU#!S*rq~_%+TQ48R&1SbS4|&fG@c>%q7O8UskuAp&3+p|Ax+*vbj*scmiV5SYZ`iqv*DNH&t%?)LL9 z+Dhytc7Rt}+fzne9-N&7f6i8$bGB;x+bz7d0D&eBnrWk(Zq(Wv9E+9I+S{B5CU?(T zn>Ve_!%nwd+f}89#5>^#ucXGgSR1wHzqt7!u~POqA021c+I*FTJ_U-j-ffYKVOKb@ ze3I1Jb;WUs3V8ec%k?dywm=z;e?OV>kmzIB#>KI)6nPDT3$?VGoONe{m_e&GpvBw9_k=SsXWIx$40v!{r0pwFm%|rNGeVcZ zym)hPqhj1?D5hfSEpmb15_4Ujy9jqhnZXLWdBI9Vaq&sK8u$v}7c$_(NAl*1%`%=N z?&?~|wIk#fa)!cWtX&Ht02(YFYSN|*j6s;lp{WCC8u^8^vCGky+0*_hf;$Wm(v?mI zkc=)0CI;1D8`aim*w=wfRSvX*HjD?HvbBOCl`0W62Zr57QCU*6P|-Bbuj#!aWj#vo zn&YzAwNP-^BC_lL9KUE5s%aRK{fbQ*n}6|))>9+5Y+;4<(E?9u(kC*lbxB5mqTf!F zT?W9RxyVDKLUcjkMuT?3VWh$uKn0*}w1T1G!Q3P?*jTVVa+laf#3E2tg={iLf*m%0 zFyP^n0*Hc08FnZalyUq(EMulfUjq02(K$yn=y;mjX&5g|F0*4!^6h$Dzh&E6G_$Zw`{})g;wo#a*rvu#02g#;* zWpob7^FOY33~2T#6Dum3PmPClc3MU7!4$yMK1I(*R3U@0!Aho8F2ZladrcvGf)XQe z5gvAg(YdKS&`Nx0$*mwFI#SdPa9!5|PTh!mu`7jdD$DA4N<1I5jf>0*Zr&`GO8r_0 zNZ(*=rl;sGEh~`GQUy0P4pb#*HWVc+VOA#OLKnmtIJQ=lgZp9aJJqi(uoeEc;mWX+ zz3Al&U#l`@FZYHu(*=8vHkCAoK%j&f%}6*dHmPBM%g!@hIjxY(5dg=69}wqlru$QX zlZ-BGi7ml+HdDk!*Z|cDLE*i&#RAhJU`;#AEj|?iHQ*%_0LHpbr0qg$u)uytghs1NG9{zu2NFIMx}>P9v> zBL1CVWR~o&5Q`S|LGJj|CetRNP#z_w$~We z#PeFRJw1nvoBq#N3Rs3KBwUpeJw_=HV^YZ}j{> zV_y9ib2kf^V!nk+pynA6PcQ(B#~Koee7U0amcIyS2>*+bYDhlS=CKX0pLP3=YHAb-Ve|VMB@L$6Un4 z^H!t1cgRc0#tuj4!nSX;cAIS5;M#%9U)^c6KYsqjc8e2%mDlAs-2Gaz(SH6#r@71Z zaKFJf4tKXX444AMHssjcbgR~B>E>{MlcyP7WgsT6<*&oj19xH)g?5I$WGfR#nCwAB zGYPSUrkAjS5P~UhpH1@TzfOl?G6oDdI}b=Q!RtF(MrY5zXOq2~rCLQ4z#4^8pAQgn zHBUC+a3&B7uBWyVNmvZ#MeNOZFzb8;L`p1D%FBU+ajst;1Gs9gxYocxHre+W2&OSD z)o1(C^#CWnd+`+g`0mRjv zeDX|0hX7N`n@tJ)m?az1bFj$U&%eY*7w*8ER6%^`Bi_?K4c57LdV)02Pd4TQI2Eck z89}`=n~5U8x;!QAi9{js7gx+E8|)NBLQA)@>4>VRve!>GpMPl)5yz1oV>zA>3sh*R zWol6T_8?}A(@ODRgRvEBWqKZ8Qt&7~KXt;4z=6B67*r@07@kHuEZ{+9ORC;C;MGfn z0cH-!+{HB=tP}+3^wW>DN%e|u0)-2rAHKY*En&J#Ub}Za>bOZ617-w-N0W#>5 z1S62|Qy>KPphTf%J>__S+u0b@XR9sjPyN+az1gn6(`}@iE6sTD~u zx;78fIw4kDi$!8)y@lE%)rXRLyTvOFWIcjh0B10ipckU>C-uV(9`8IpU;wJkq+QSd zv@m2n8yurMN}8@;)Y}X-h9z*A9`;%Mq7ZdFWJc&@lz>B<4@EjnTZS8*X$B?tx`w!< za37>K)FFi~_OtnlxR?QV;t`U=bFCF)wEA9BBusB|#cM$(?wJxeR%FR8C`jR85{uEykm6!y<6{UA zW)^Tw_Dc=5(jUB9 zGK&o_WZ9+RJrE-F=UKoDwhtAS@2O^rAE_&$9~vRfTXEh5wHhKT>c6QlmI$?5G+Ayk zn;SK#@;^-3l~36EX5|V3LM5h&!nzvg?^?$6C2OK7w&2s}U$80rhgZ{jY}`7-s<7Wb zP}OYymEvERKWJ>kMgm@9rbHsr*LJNye0=Zqo4;3Zp4v%l!;4t+{MVQrJqg3XS}i7x z({o@ngg#AgC9@=`5i^L%FKgi}60%d7PNw(Q*I&o|7hzfy$FRHHl5lNA3JIFv^XI>Y zNmSZ7WDnM#OsyD6hsTENO>HM-VyutwY9?Ab1u)(Q6e5&Pi(xB)Ehewi*%d}NbtQxZ zjt?^7_B}#_m&DEbDf3LI&c?u$B|K4;X1iwu97tW$X|@NwX`T)|3HyoQZw2gq$k%2 zNJSEs=Atr9_`Dt!o2j-ht5{sB*iw$gaTB&|bEpDbfs5s(ge#b#rO*EZt(B4ozD+NCIUF+} z^IAs%vUUGDOu;&x6b9ZQstLXODj;!YmEi^5V?>f9?YhXqbVehW4R7GY6|j0A_Vnk(()!isDwXIucK7AoIjS=O8 zPzrF$nsLXn{<-$33R5(}48BptYwa#pj5Uzi7R=fjaUhA>3+CTf4zOU_sFH%1HYCnd z1uzX4Sy@!CQgI?tL3L0BE$X&S4QTuZq|bclhJr>Fj_NaUA8x-q)`}6k6MP-wJyB2l zNu8aNusvGg;rF2|f1GZkAbJQjXds8Lvj-gXSvxBB9AV^Z!+MX3cRW*PXx5 z^C?O_qQIUYz?Ni1cqmzlB3LBR#MUSPZFVSTq6id$Qe!g~c7qPTThH?a{ART$!tWO^=Rh zcHKP}CU_qIX#C%fPi(co4c$bv133Sw9k7D%poG&6-%2|AB}d9NkVEd6&qwlMi0K$f z&XP+u8H5|>3=Cq(f8B$veYCVRk!90M>>GE<}fl!fE#fV0|q zO=ll7Ka8ZiyrqPLpXxE~(m-ekK0xaiy19S|gWLdI<4~(o>{cOV9MVYPK=-{xfHy87 z;XvDBPd-1g^wnonF9N})&RR?dt5=Ig+P$FxtUbYp3`6OIX(B?&QP+U&kJ2Bh<}-+zBNyLY^?pG^(&sK|WuZKjZ^>;MpfIPGrY`b1zxv{VCplfx|xlry=b<+H?jrvhtWJ@PN93%WazSyQq&ADS7%Y}W)0$fduf;4s4 ziVTJgRye$Jkm8{YYlHS6j`eV!(vcMxQEuQsX`Q&itk_ z+^!yM2HnoQ^{xS)`&OwqsEZF*p4FNVz$!g*y}4NyCOTxCYx?%Mhvl11cz9~WQ0e0I zUCZa%KMGR4dNY#WgK~Ias}}1ZL|-6*SrPcH5eRWAOnf7WslbSUQ|jBtcmXrh(t17~ znaWRhE)X-kZ^&L>#7l<#<&iu$e?rw*KD@@C%UT1{m*m3MHzc@Wlpq&=^2;x~XZ`iT zT7TpZM^}0jykR_!*c3B)?M9Ej zsB{Ua_K_mH-Eo<;zT{vehY2IYouwam*CVz$W)*(mU5E+#wTMk=3=&)aRNuX118aXw zNWo!J1n4s?bYaSS>;=m7a-^^vqF{~cS)=w7>6E2;s}W76Omi`T9nDEc zRJ6v@+jia5txxseP*|RtXLtgavE=0&)DIfEK({>_eMc%K+fZ4kJj9ca%Gg^Nb9G@h z=%+lSj+iIyoxP=g3ZCs+Y<2SX+npI1&@8fYL&FzjEZ~bMM{G)}&>CX>mF}3Lfm1Lr zetDU-3ah=fpHdQn#HyR5IUHSSTd!!`bcvadpsOewffY433j(QC$5?UES=bUQ6jky3 zTV|p_o&(fX0CbxrJ{^*S%V$9J?yGXkiW;hg#H7+X1TCe(Vk)pyBu7QEQmmi@LT>ds z=gKyqv=Pn{lz?tSrYsAfI;p2G%zJ=xfZ8MdCZd2U2jM5&go&rf(spr_b}TNG$`vSm z(&)>Dd-vi4FR*r8Dlq!Dya_e{|M4(=VLBXqu=2rlk>t_v&I7CXp*aY%89_T#0V@1@{Y zA*k$UWp=d!*E14FTr4n(1AR$SFKIy-Bh%*zWVNV7d!K$Ym-)5K6kIMePJ)owtdF&g z@b&%%Oi@2kTC864?lixK7O?~bdmkc{{VS*5N|=@0m|6qLi)n4)Hq}Tg1=`cn@E%QA zi`_GY+6nV1M+gM*_=fuPZ6+;>$yA@85e(~muI=K8F4=9b;9Kl%5T>xc-Crdu?kg%+ z4tBOUdhvR5d(aJ5d&B z>8jIc`RMetOR(W5P|Pk>9~$hjx`QRfN6DD2!O48X0;)mEEm>e!(9$@An&-26r@$|hyT{N`?_r7` z{M@G3VhWok?wptTqwX>7Lpz*N!ZVc3Fj3&t_?-nohZ{hjT^oV! zi&qLSI93~ES7Pky4u3*N9xe}eS#?+6Ghzrsiyu+EvT0U~p*eIz%}EN|Og}44(14aQ zgwxp96ns_NjnpP)V5%8uKGa&0VDKHx-53BcYp$UT_H~$AP;ID;F!Gz3QQ} z0-F)^Il|w}hyaolZeKrTx3FBYmJZ#xgBF!qLudOvQ~QEL6ao6GW8ZJZo{=^0SQO$i zQ`t$x4<}!>;g5S0%P029uz#5#u8k z^OkQ?bsrvzW_<`)polVH5D5k$`Uxhl`mMq1HW_cSzS48O zsRY!OHNY%bv3`7e^gAlkE`b}v} zMSZWQh$I>`h03!o2(+D0xx?(;V=XS{%}G3JbtM5w&X{$RwQeyD3VwlwDNWO42A{BM zZ$sZ%w&j?^c39eCGRD*!p9HJFO=#gxF_5;yiSxKUQl%6^d`bP2s8h)Y7aSn;;w0$n zz=rZFX0$Kg{}5~QbhJ;Pmqj|cmctU)W8npkd!cGMnkuGdBgnnM=Ia3$^rJ;#ezG*s zfe+O8!3E{6>pk=Z4-}=U!k_c5K*$S2eMboudNpr?8|YGsW~egF-F%=_hgwuLEZcRW zhR9&VE)_;v(ntI^B^$z7m7G}ew$jCTyCPU!(s*o?fVM{1m4QgoKZHL6hgAQbgh&jE zOscmC`bSgkLc8fs*7xy*9znehi8WUBH=w1 zPg9kcUt00LY$y0SLKT7PXIrsYS65ftKtF?+vu@jTyy{nRISUV^XV5V#GP=o+G`B|F z8Ze|m#KrNo&2TV2#@FRaEbR(ohFNmPCdpAY^C(u`(1&SE+7;<1OjYNwronmZ(MCt& zwq1_ZI;>wvoLNrzkoM$K{;nlsaV*KCr$6_Ri68$K8*gShq9u5b$?pq~ngEJ&$!Q$$ zW53{*wk2JoR!`l&OAC!iJI%;AmS1pX>l~egSc`9z-%Mmgwu-LjFNyR5;$JNh!Qkkd ze?>D$LcR>beFpp9?cFw_AJ@Qb!S7ugjrO>TXovBd2;Pt6k6O_JG8VZ{Zuq!s$5c|<=x|E^OTx<5spg3 zo{?|Stx=?ll?$JJLs~VNdGJxo!$aMtD^wI!HW+auhZ7Z%>js1**&kAkZ~h1q@!*hB z0YDV!1p&yj$AN&TSHivMmw)+gVFgZi(u=hjq0sk%h3CjNoDR;ZF4eSC9^h=@{Cb%s zm`icY%5tNtH@8%ewile#YiWm)-OJS9dvh!$JLgg@`eE z1Xrn(H0Yjh_1BjNoi=^*P4ZB=3BRg?BC(>naGc&b0tbe)@lLz!v3iOGG1@TvDNYaaB z6Dsu|&_3H8x?oXz&q^>*z8I|D9}JY^j&@L-32T-cue6Xu%kAauuhoJ%*eiMq4=xr| z^3Mz^XFkfO@N_vmE6*qUf0*#s9Oz9DLyBq&f`XG}+7iK8>MKk`aY^*9fF`(4?z}S@ zA8Z2=A69Np*EHyBPgz%@De;pey0kpa^pSNdI|No99z!`yyix^@6Bw!`?ZYP-!A%S} zwPdkr{>w_|xo;erKZ5up2Wz= zeQ1l1#6Y80uNbTFn6&5|X`&cFN~15lm!)h0Jhx`duZMky$EkqDt-zdG3{~S+07H_O z0jf?Xb;HaWMz>t*nf!uymkk_jA9Gcz+-wrqo%rRXj9?yHrKXX)6GTdtLW$zZOiK{g z5q=awN&rJ?s#{Zu3CPm*(i#f#Jn`nthUH36K}K1Nn)j*DJ1QR12fBq{PA;w#6&)H+ z)AnXjh`a4MVOq9Dv@zEbpYc2&7JZm_pq6n}A6wmT^{iB;z!!XJ2ps4K@Y1lLD{4~! zkK&BDCL~qVpQ99vMx%}~qaWpamudp7KUNylEqeF7Pp`Ut`-2~Q(;bqj8Vti+=c&D4 z0fkBhGxX1WB~Yct+JZByaq}QGUGY_`3V6av&#nR-g`-D|b#J(|yR^APwTQMJ0496k zvdTe|D?Gt!xHjXxn#xA2yW>r}Rz*9h8)~!EfxZGQU6i@-2Ah=4nJR$ zBGJ7VL1X+?4H?oez8`mm`XdjDu~1f1w&_#O6;2%bNCYBL5Y%d;f}%8TKcEhP9_guc zuii=Fb?y0;zCv^JhYb zXjrxzX5?G!Unuy5z^jIEo0VDwDq%P+fn#pK$koKf)P**xyKQ{C3P1Jm(dmU_CP({F zA9ZHx9oy#BQYFWqp|k#4JQmaqwID#?wgCyX!eHBLyRnjIUcnZX+Ml$&yZJ@(8x(L7 z0s?WsK9;chBlOX>)GCaF^=MHz=q;#M2C;86`0b4~}cQV)}&2 zG|>C>`UfBaS8nw4tx7~R6esV*5Ff{U zTDu;8wVFHjtC@b?`rziv%};sk-+dGi11~VzjoDL>=EeCb#r(xsUQiHlge~ymYILkW z7_cdh*hAdcx*DMHyaFSoZhyZ!;h(71{1wAxffw3pOtBPjkQ89|dtH)J;er#qfk ztelxLBW=VH3bL{m^@D%L%D&e>(g)l^d_XpCoEr635gcPuSBd3!lP6zGxA&v!O59mp zml0C^^wu}$o{VZkGk0ry3BbFV^MEd+%b7YdND`TU#?kxI4gnatmz<%b+Jz1ddaw9H zoIe1YnHS|8={LBojw$$d^JnVYQnzq2-aWm>%t8D0C^oBjX4N@_YOv>t7oU|P#e{{f zfLu32*{YNE9=>FcrOVULyRE`q53i1u%4MYk;YifiIH5oq1ZW2cwJ#S&6AVrqTL|{0 z-j>G#ykBG+8m)5HO4x{SnTq*zD?jO01olB2_ie7^PHN5VI5KG7J`y zf}4fr&W~wU$wi$?<}9&I5iEj#pAQ3^-M=CMkXp87*W32N}=#uh~n&>g;{ zlJ3p_Vn8@L(SJlXpYt!yweB@4f*lENkv)1K>DQMe8j`L;o9y~x ze}tLvgE#2UtNu6rS1)ZFl2?QE*ZuC*%GSzLGU>Wk8^ev=4gUFhu(GYwFJ7*E;~SQ| zVo{?Hz8bwBeR~M8(+oV}YVX@?9bAvPR}|!X0~L3#*p24hDgS&&b>K^#KRBGcH{WTu z+TR#--#UY`@&-_%$GNPyfCi@OQBMa(l2o+#XO2d39xb#|CV5=Whp8 zLEYJULD2=`)aGK#Tsk>mOjk#zvQSJr^M7hwD4*$9K#%Vr5)aJ>fk39ZUw&c13R*xa zIEv5snIBj{GfRZ^XJ_1X>N4`;3BaJX`($c>&yb1Z^T$xT3LnbmSY`ak@$CBu|QkU7#Qgc#YHhKg)=9m-^^PRIfh zmZI1PekrX;A)BTLsY6pJcfP}d$f8*jl%?vHGm9lHY3^ z>;2^o{lhju{(GA$;pE3|akjs;vCK8wL0UX!4YZJxNPk7FK`mnr_eTe#3&JTm^b?fA znD9d>PmIA9o2XG{xtC6y=+Zu^T?7U3+!dOe&e#)ZQ!gBKf7~xyw4l;*2Z{%qjp*Qt z3_{9s%VVgWsAZWOP|r1%i~TW!w6{mWWT`6bZpgicKnmZc=3IL&l0Bx*9$ihH5O6eg z%J)5-I$1xMvryvol6-AD(|6o`b?ytx$#02qz@p~!BJI@c=4wn1(IRx=TC$1*>2LZ6 z>*VlCo84Vx4FyH6%5>uXdr8&@8v?%dJV_0X%Z!{HUZ=;q~wQ49^~|3 zxg_<`qH|e3fE@Aj>iCX3&Gm+|Lr)+d70ma)H7~Z)Q|val-_#}X#X#fNJd}#cM;E8P zHTJ|)Q3Bk6-z#yhTa!2b0EWr|`Dx~=;P^y9GnR@X5sookbc*jdWe*cmjst#l&pdpl zsOVCGIX$Iv0i-MY2)n>Ev5JZ1E5N{nOkGUQ&iH-~1e!1eNBbkylBa&tXzvteqnhpf zVAl#i%UoJ@Cpa;^2kqc0n!p+y8wO`TG?Pj-mc_vEvXvm04dT=n`tXF-kbQ*RGxr~A ztu?x#@J>_Ha?W$KD`5XKhI)+qL51&nL`*fMnNpH!w;OP{ zVW{02fZ#E_YQ4X<@)Ulz4%^)6;CGwU2iWYt9xgrw9bDho*&X0-S!5ps2WHl(FTT~s zpVF?a8OPwtMrB)K`~;he~9;;C?^h7iW%z zr+9HtcT&&d5gu#6{iay!E?jWHA2|j;B4rF=P=(xHq7I?EAB>pp_#loX6fM)D`!=xj}a$AkzJw^)Nb!8chBqAHpV40_SNuezZ-TDDW%f@AZpP>4zax{6{ZJ?~mKlwK zSP2C3YZ_xEvUmjv;dLpjAscz{t}05fB7Yc^6uqVaCL$+!*~=m6P_ETW781eX9ysCN zeLuEPTSrwaK~-Ch$G+9xO3vzuPs&iu^zTX@i0S(Pr z#$zJPOwc6X8Np-uR3b$sV5DsVK&WD)Dt9zgu%`j2tZo@Rke6f37uZ4xst|A-nX$~R zU)Sa~1VcwOS%k5nV!$sA_WLS_r5K7t3pE*IEh%w-YGE)UB^c$nVmsCHU}ywvQ72IF zn0hv;H@xwHE6$e8YwJ;2fjJ@spv5Zmurhsx*ZrA#2<5Gsr>ff($PqCrDR3VHxGJ(+ zw{1ms*Q<}W&Fh;xs;%O1B&OZQK$fb+04Zx9{m}a9J0{4P{^HFa_lUQJ{jpW6l{A!P zWVqdB%(BUcT-t)N6E*ABUT9LWF|_>-G#)R> zp93wST7M~KI$Gu%j}KAAxActy9R{nG_3rRDu(IYOL5pu}<94zSqC5uZpSG|y*@G&q zh0Lp@vI5E>Izz>(^m5j=wgs|F!ZApvg%}`Y7&U7o%9F%S#73`B60TS`h#UIf|4!km7l>nK$ zzhhTZ1Q{|Db@e{Sb}Xp3j1ymGt0BtX-Z>&U?BpJUxzugoYy=mgg5%l6PkO9%h53;n zj|>j}N(=!w2An%4yi5g8f67w@n?4`E6~HecDccK|*X<1&o###j6R0@-ZEa}@OP^#F zT`WjhMdwkmyYbS4iwu(M?aC7{hQo9~aUl2)E?{V;m{{JXi=fBS)U z(?<6TcWiXO@Z0v?zE}80N~BN_&uqy}kMk8ir?5N6_=&w@_cBM4Hdv|XE*s}K>lGUa zH-sJVdwhWA+E*bB|65g8Yw9p+)2W>l^&^gxlCpmV$7ZM)zh6?!i6)z(98;2~BSvpq zMd_$WH^4l7<%l`9DzSU~rTUzJ!%gA=*ZTakxv|p+;akl1YYO|@bmR4Pw@K}~4W89b zT$`IbJj@0%u|nPETDQr@T#7Q(#_&5YWEJnQ0oX>59kw>m!WfkyTA4mTW+;O*$Bgi6 zCX4J-&0yu>Zyl@O1RK2KCt8N>@wf>dfy~*&IdL@tGhAeKnfbJs;(FZNplCVPger$o zP;JvK3mI`FFB7Q6Z_hWxPaENsQHO0)$q)*up)<*q$X03wNz87+(tC*9VAnVmzdSk6 zi)NqZ>y77NBiy?k@`HTTq#6LnDC5gJ?!MK?{?eDE6Y^tQ{ekMFoZE*1Pv<*v0h;@; zx^GpJ5MJBl3d<462n!Djk%^QOm%ypYGs&K+ZuMZ{tcb-o$R&Yl>~;7^IAQ6SQgM1> z&WgEhI{J-CrnlQj+}#S1{#Bqo7R1Fh1p&?7!Nfk}Gf`GjZDEBzn4j89C)>PdU1-y4 z0a>UsjPQysV2ofLQI>KOwElRshd>g_1h)KiqWWcrC%EI$!LU#T2X1ON6aY62*mT6D zZFA$9o4MA}%HC**Xe^LBZkX2s5YgNgpm60l3Hw8vLMRw9s!U_vNA?IabbJI}gDn9v z>N?jYu9SV0NpoQq zK$sJB&GiM-q8d~XNGoM>;_)^O#$bFci6S|rZ_!9nSdcYW(gff<5&8s(#K#dW;;DHG zA(nrM^$D&`Z+WNnU|!$G+SY5{1u4^^__b9H=iVF|Q4M*{y)R)zp;6}W^xD{%H-eUv znDo$lKjpn*BTmusoZ$!0J;%^sq$1Kn0~=9=c2|D!Rx%Sc|!yJ0a>QErMw5V3Q+p+!38lzB{#W>{|V^>e#tegGrvJHBE1 zCdZ8PSy!QBH!`;;CZ@;1F89n~am#lcq7kOK$^C~M957IfL=md!znsW-sXm^;3M^r_ zPyGZELm0>{93$?uNIeMbWM3+#d8)+??(vXi`hM^sv@+f_+gHw;wx*SlUFcd7ZpMLV zHYUbw1B#<;z!RRm<0-&>=2-#G%o%_X@?` zK{tZ|B9n{e+}?*uqdbS!w=5kmLa@~P4Qd~*vSOLQow@hPZyv`5McDaxVEu($y<%pZp}k_>DY#dKWPecSHGRN6DM!S^Z7W)w zhPx}7T3F2VO)gn)Z3SbG=no(8WLMtS7~}!p*Zwi+7Azx@e!!_r4*5D_nzY#{T&mnD ztJ8~QK}jL;;4h(Svl^`EniEB;`5I?$?Xr^Fo6n=B6yr*xDPA{+d1Y8^P6K(R=E5+Kx0jIDc1405_azF-a>ikR;U!56A zH6s0tajegivIQJr%fp#@1rE7gs{l)Ugn}eoBPxwrUIPH3RU{7&N^1Rd@0fBH2`Z{z zx$M?*hK~T7%h;B)zB;PtPA&y_CSg(L!s(z4HtZ-zg|Y_y+aMFDT@SuNM<L8&UM!wTS$Pxzp>JB1N*HG$9dhVT~LFb9@A{MM4*O}#Z(L3J>|8I)K2c0x|x zOoDN9hEZzt>rcO!Rw?Y%rznN_8$AUosbzODbC-r-)gt&J_ljSeb?c3;)W)kT%TVmOJoB1u@^ z+x%e3Ve$%09-pUwjryb(U%&(%Ijle0#w24kalPgr8X3FE3OH!_3s!X&rB1*@{dzO7 zpy@usdb(tQUUW}wXK(T?rlTQn3;++A_gadcIR;ZiKOA6Q(cN~Fl$o34YLMGcv&%); zaW2MIZM$|$(+awu8?T|yWg^VY?3@}I$w|2#`6t%L^ZN*6P)bww8yT8ryXT=9`}~j(#@Y~ z$%g{t!|d_ytNu1&gI{fN2N4oq;Tb&dzCy6sA6D#F3Usni)%xh>hd1NB4!jb-6|p*7 zJ41ypZhcKno_=r>80CmvtlbS3&?<0(go>jHa>it!pXG6U`UZ>uvfUaJ5O>{+?Q0{i zwA*&~D@(IH6bO~)QlW{N!`hKGZCHpth7#ha_jU8m~@MLb#3vjHEPGUwJ`%# ziN6%{WVmXGXe$mJG3yO5qP2DNuLui9I)xmB#-td8^0wKA=zs;Edac|GetN_Ligo32 zSDz89h!y#}E>9RifvkZhT%DlV? zf*un-!WYr_3DI`+M=GH^pS#s20m-TsI>p=F+6me|1=Y%#Z9HZ_m=nH|OY7#^@E_(N zOzOProx+lMy%jFW6o9g*_=y~B;tSA{m8{K333P>&JfKu;$H=3c#o;SNndqfUO{O@w zZ%+~~b=QJYK4V3k>Xc;>Z5j6LnTd5oc|=Y^?MyadhW&F?IN}aDp$%N=nt>Y7VeFW&6k74!S>?%V0UHcR|bo#JIgG5zioGgQe525J@`L* zUhlvh8N>eCMxVRZd&DTOtZ#6*(c9iw8}tU-y-m(6uWSxFJRt=B^|-e4Y=toDp@%!; z=ok*RxT1y$hb~dj!@=w2mx>0YJ1c{&t$uHHKrSag)?diuvegY&H+K79?Wl_!(H=(@ zoz31t8?@C8@w_X#y8nDj(b$R$9PT`;f(P|$FvQEFcDGh~1RcKWch3e--Tl+H;a%3sJL5%irbbLyPfceTqU_^|lh+V*ghH?MR-)}1A z>dDXl;b(?_{r!OWy`v|;_=kAK8fx+h$EUsRQ&n-mrZZg#NSU+51G0_h80vs|m}i@} zsHo0`LchgBhyG)7sl9dRkII4c&qrh<^l0=-?s?W;F2z|N&&cTNJ}v&jk*A-kmv(zi z5_y#TPg?cq%@VZ|u5%kr7lSv$TC7U7&fL@s)x6w$^TSVimE_Tb zRxU$asPs|loz4(SVrdYTJ6m+LFNSGw|Z>mGSDLNY55K>IsaqwE2^$k z4hzdzsX9D_l%Zf0k}cdf78Pbj08R|_WRJEmQ#7`Xk)Z{HSCmyxDyg|@+=vnVTa>X^ z&f*peAwsD-9;>jLoaJiOM2T*$o^`AQl4R6Xb}QPC2QCS>^Gehn`kNm#k;hPK4{wQg zI_&+fx(PQ?)Ce`XHP^ayAQYFi2 z!!K!(Y0Gp8M?|drPt&AA+WyqWcT??Xh){O}(vYN1&7l9MP$tnBjENEPPO`@i3o}6n z%>@(Jkz6oyq0Psy+k4;Z!$*_?4z!F=Oi@s-L5atpjOiM5;n%DSGDpOSfFRI06oknh zX>l|3R#<=*BtmcbofMphuGv zqjp}n|E2dFeb>}Z0ygL#)+#Vv)W!FX(h5MP%B)jj2H=uX@e7cGUL#{D>fZ3h9)O6& zT920p%m$!0bH(+gYA$O|Hr)(q9+rAipLfPk=wjv#@VQJhgiY+%49`?H5r;8CMw>a4 z|5uS8swK-RO^nv8CM+GR>1TF(i%h8nR_i-T!?)iboU0*F=M@=oLM6u9m)+_ZBL=ib zpxJvgjoILGa0*8!&W%fyIg+4r)|uh$qk5BNrr8!m#HwDDWx*@%x3lx~Sl@fXY~dHq znp|GO-l5%a+pRALd>YcW9t2*+q zJOCC93$`gW{HO%dKAKv_go7%4jlSxuy!2;}eW*%*)0d62p5Z~1J^{pclhGz{d3Nkk z)};U27r2$fyur5;fa>1}#*h;gkck#4&8hu*!f0x{q*WagG$XHa=~ZYYm6WKTwpX!Cy$K@TrQ#!VR#R%&m`c^3 znchnxil$@03CqU8wg(1h?zUiPOcbkAnqUR`IZL;&B8IyG;%DB%@-D(`=2h;Qop~2) z^aIUmSy5(I4N{ZLB7GemxhM;bFHu91kkSM70SXV%v}K={>7R+tW;$s^lTIL zaEE?CV@KXvEQc(LYTY4<&dEt6;H(l@x+^Oq>e-Z4WJ?`)CHi*TAL*FZA7X7pyB?Ho zbR_Ui+yY(7J_x$D;fY?LMh0AF^|k|^3mzYPIckm(V`un{QFY9ufgYg}6HuZ=3qEPP zt3c9(o_x@~wxgdB%_P=Lm|krxy_!vl1`8U5P)gMrSk%cu+w+=U?@JsDhFE-{mrr^>|3%MkWW!1;Iri7R z!yW}WHrGB^7k}|r?bTm=VV4O`o8=H?;;S^2sfB&-=VsN@d+MDZsbflH=MhahW}Rmv z6<|ikoRZcSkC`7r;E21pPB5jH=aqa!Vi2+Na4eV9?zu6(Sc&e37oS&blV3CAR||+J z2JTa?tRPc-YLS3yr&7JOG%%KF`~+^0s-zTQ$I9pI1t6Fe?Va;}5H!leltC;rmp?Yx zeXyPe}Q+|d=6Bmz9@rG1mFx972X zQ>2P9NemU2uKsaSE-<<1LTE3cD4EJZ*TS4@1ANoOIb}SubR?h#E}d& zo4;44b=b`+Y?su-nYTki;qkNw?ogzpZv7}tN?tYC-M^*2W>e?2%k#RvMT{z5sis+6h6BTM%6Eh^H1&d8A5A4pKmN%i^XICYwdHzyuU%=#eg5D& zWhf+j#ZDSL0dkK^VOE)?;6!Q~j*TK3PX%Sld#c9jB`?*1SQAB&faJ0Ry5b4cJ=RSq zIC{cOxB2hz07#aAwe1dIvjk^mfZ~a06!L>(Gy0k>n%xlCFjrUP+v;1T526F1L#ywA zy=V+mzT9-k+lLO=$%c<>bkrx_|+d7-gELH{yLvHL! zl{AnfxE-?P1kjlfOWsJ_2N8do9EEu%7)*{JRPmYVL=*F<1;$ZE#2pd_;KaoRt9y=! z@kdc)5ylkwBrC(}b1Uvsl~x=#wn4c-cB-eY4JfI-?UsyH!J7UOZ#Ti}5h~eBC0cBW zBpAhS&Ez<>f@d2&%GJSWCM9>to-{*GEV?C7=1Gclily=V2*8a*S%G#LYLDkedx10Q zS)Vb2NF^&Wov|rcT!<2zHU;x=}JyzlKrQS~D`81cOJ8C52 zI7E|2gEt^hrLd|3JVu$|7spk&x&QVPnCVD2jYBHe2pP17Z~zUnngO8wzKMTINwZbojoID~ZP zMS2xkG%FF{Ruvn6-`lLiA%kqA;{k*#MvKL1!DcW-T(7C1?OQyKbNc4^CJXPDn6P=> z%fs@d=P_@_KXTb0GiygG(8K)p&94xS8p|Eqz=Y+3YGfGArZvhrO!MOU%Aq%k$-zb@ zzty<6v9x*u-m5KR&)kBaO939|`y!dvSC!cI89{z#l{<6sk#l~gph*$JkLswUa;TX5 zuRhe@a_2p}omA0gA_+o5g3cM1nsrHP2Gq#FWNlO+uawhDeW-R6kZ6@xSTbN53M3Zu z9k@O+5+^VVol=n4+4%T@X;~9D|CGy)8|JMUgbR{1zz!qM6OTf#bc z(CcRm$LEUd;Dw6C%T>$zj=Ugi3|AtF3C|M@9)@j!+|69c#>)H^tc7AyLz+a$Mgbx@UG(8AOq8 zu`ybGc3Gjfp{YSyH62@kPHaA(q;nbFj_rp8a>9CHSy66Tx$U3W+;DsiQDKi0xl5qG zg=o;+6?<7EqRj`7kIf-&)1D$^hZq5{g4HoGR9&CVd61urBHafUJ<^A?Pp~_A7>^7g zz<89P$v-CtBYk5kTE@_pbIYs>mD9C#?}5-3u*u@Er*nRJ{3ZfeRUp#kIZtexN0BOl z6Oi)1>b>+@^V}9tC>>Db1DS>HkbAqUa|EO&co)!a#iX}HXxyTq7zkp)O4dsX=_ZO zIZ!~-{uxC0g?jdmG)2G0OQI#5_p*3I%IgI5ymtp0gD8tQe{$|l^A?rbLH=4fCnv^e z%MrRrU4VZ&0Bbfp>wtj0y&U`uF+;W_U7%~U-#X22)u$NiG8pZS+Q-4u!epR zq~{aH;e^7F!_Xno1}&{8>6A_SSw5M!98l}1*%mIUz(|Hn44#oJYfE!0+pT*J7|L8| znJZxNnXneFL09&Z(s4>BvF*rMF{<>o$1lcm%J`u56rN;y?> z9Fe<3g(>ySmLXALdxRT`F(@_WPa$VmBn$@jfG*J=B5VnVu;AOvYss7|wgm9Mq;rIp z2-7xYmFp{B9%Nx8StcDBwwS!PT}rTE#Lq)^wM@F{7p8{|g#M%_@$cJ9 zW4xwHreGQ5f$+*JxAgw*W~$hl_zrkbDkL*I5tt;fhr?5CG-}#8WbuKHvAC~YAemdFoTbHHib!}z` z%i2A_Cs0D`^o%eV=3iJY*unuLVzIxjmes}%%7*Xdq*k{mEY|ySxUp{CS1q*O!4bKj z4veE{*ePSzL=I!4b4p53mgWdmJ~5=a~@2?umz?FtE{YYgQ|FGPNJdCDMuJBYnFz!3`~i z5nN9ZEi>fxcnu_!X%NuuG+J-+Tl2>0m_bswS z;yp8O5J?dSWgdrl4f^{&>Z9&@-5npK5G0jXP`I=aPF^T8)_-=xR4RA2lgu*$qt2Ls zsk)dWvM4M(S@xC71t;TiUWXz2|3V9KO3cnE7DZdgMT}rTzNVRwBe($q1piX30EjPA zEt1{A9pa*bhgepH$7FlN3FV`o>OCve&uX;Sn(E+bupOSTm?ZZJvELi31tP^s?gdk7 z)HddINsr07fFr=Fcvp0r9CL8JH)F*itK$|=m&*oF2^XbQ%DOFNIgylWF-Zx%v9~sw zTbjPewUXJ;!`vp6)SwcD@lQ0QBn+UgLHi00W)SnMen$-s>^D9fer8xV7$HB6CmTOe zAFQr{ym6?=ri#L^J*lYr(lPPw-j;$66~jp@o~$j^wM}iwCY7`~tFW6;hg>h7*=X@{ zTWvWg+n)mZGQ3lWm<0QsPY@QpD~Tvk2bVC#`hkL_tpjC3^&%KIpFs#s%4!!bMy|Jk z|CmtD?cG+VHAU%X%lQpx&)AxIBdI#XwDRpfWmP5h3>(Efi@*golk! zqe)e3-x?(zC7hGw{O~}kRzjq?Phmj!>6x4M)v`%J1x0Lpax<0^=YE3wO{^Djs+KN* zv3x)LAO8@V`qeq|alfA8hD@7DHpM1sy@(OTp-=fYmZo^NQh%^mw70L78qWaM`1}!2 zD=rGLZ>_gm)E-+}mf4}DRUm1J#)`UT=GiT2XbKb|LJ_h^aA6Y^ef#GM*NCsJIj5ek z^o43g)C;0n$PAMOkJNJiM>JErf$rDL{uNBftyN9E_oi*;!^^@*CMRf_B9hx`zf39+ zgBK1hyQwyBe4`(>Jd;Do+98I=i(#40vm6EML&`*I%x5!YH$L-8wuli+NPSSnCNuAm z0vGnY)D|f21TTEky?^iCY-@AwI>os<;n7BPSV*|d903GV+3{vn+{a8pxn{xAkVZgi zsKwQp9_Gdzy2=F*U|ClY{UJ@qAJ!9kI&oWjH*mzz%6)sVCkj1cRnkVLln%1 zYqbUqMqjNHnlI6rYg!yynP2W-cyO_R z%lvn}g^gDW&g1gcN4M{fh1o~i?i4FusNs)$dGbRX z6LlpNbL!pB0gSl356*Q&_-E!rNC>Cx7y)n1{!wXUAVi}}!04$)1H`Jw052t_yns#w zxTC}4#h>?BI}UHn_xYpdqHQpG5uI??>YUEE51pKzEFK9oLCO9^ikR2n%;(Ra3StA< zvkn0#&L?n00h5)zW%B{QGdJ)I=YS8Z`n)_zPV!P4%4Sy72tjc(P@g*b%qZLdw)q`)Ds2mP{b<*9m2#G5O=zBIjz<(!%zj za%TuLvH6VvwiHYSwxbRxCStGQ*)}h7mZV5PEZ5Wndg&49z^krDB&k4Au$^schc#lZ z0nhY_de{=I?wS_#zyCK{oAsnjN`y-(6oo(#1K=1Ov-u#tvT1~6@|Z}4?vT7hk^8PR zHj>VUTzN3VVoC?Ym+H)H8jvm>sUT?h(|zviDT~7mSxH}58#to82rB{KWH@f3xu4-_Y>43%{i<*i;dS zv$T_<0thvA4k@E0o?m+_7rmdI*pm4!{$utHQJJGN zir9@J>D5C3eHSlyn758IA@*~h~Lb$6`A`(Rs?5NHhO5h*lLIQ z85)QM&}_Xk|KxUfh$?@FYH^+*aIq&IlgWF4uT)w&F8J`!5C%vBI=4|$X@9gYn`9eT zF#TKu=H>$ILlqsjuh2cxzxMN6!s@t2_!bv2RIWO`KLw@k3_Z{ZPrXGfYKv{Q!(z)R zRd?NawM9|L0k^EJZ1uN?y*_0dVcCk0=(aXq_jlF?i~Qh*Z7%DO4Y#&-*rE9~jePTT z5HT1VR9#n%$(?V(KZ$H)r)#$_fAPhmFTVJq_tSFb=YMTGay>(V;vR(oj|rizf7LD?kt&=pn=eNwUPL1II9!Czz?O+-p|c%+EhJKdm~3TO;4S z2214(oXi5T*BUoPc2E(FVYjg!s->16YT7WSz^YI9S1tcjJMpAc{CYXhTxQU6OT-3O zIBB8di)Qhe)5hhdSQul-p05nTZ^p;JUHGpH zzj@5RuCpt3N378J2(w7&32wuX$hramnHqxCSOcSIfZ9q#aLF@nYRxT8jgHO^M{m$k zXIt|k8xicm&fl)}*gJlATPKz1Bc7c5ni2y~$e2fl@MY`7nX>gtwm%VuP+Qe?lGJ z<*wpnCg~-SiRQk4AYj79i-B9dZugyfkn~do#M(U83dw5eS(MC{lGRx$)TXt5;6y8% zl2=XdQ!Hn1-nA70CWPiH9)(%TLAp)jI~O4b8x5E58y&Ly;Co0ZLb-PP>pT7Joo-n{ zX{u4X+uvr}`}J;jus--^XRzAuc2@@56q@zww*1(70Z)FqwL*BB3fm6b3;i{A8>9uV z&Wrbg93F%9B9PCI*@}6tZ^R-CHEVX8^fMsHYM=SRA}uK69)O@qRFc&%I&AEta=WfOj*v2& z=0A|KQ`AnpqI6UXoGSYhD_h!9X$~!j_%w#mP+TTQ3C9AIA4p`Sy@{>PweKpt`r4cZX{=7OW?Zl zEWWQKJFO6+6xCXp`l<1_?+X>6Q`7|u;+pM)RA)tpCTlTDw0-(JW$4%3|C2jk^<8Rm zp4B{j)^*u4X6F9*j@N;c4FTSN!1eL9M#aaoM$jjT(2%fdei1~A1|Xu*^2}B(1l!1# zN1oB^#%jf?*ep54S_TQj)suh8K(w;a)wv>JQOwX-QzWbwWAQJqZn+ zv4L$(Wg6#Od09KMrSQv!0w_#BD!QHw$l0GYc#-JNYs?Cze)UQ}h(wd|aDL-PfawLvk=l z!e+aPL)amKHxACB6G{igt}`QHB!$MJ)qm0pH?npsQ3%wOBo{xi8$T|7eW?7xug7n& zlg{^40g9w*IrYcg%kdjZu~B?Yc4v~QiyM1;h&@8)N!j_z^S845&9MvOy_J00`(3wc z#UoWJBmh#?)3(fiv2YSh(YZ!t(Cn}=Nx=q@U(TpLi()_Ed%`j{KKYXnKsk` zwE@gX0#gGj#{0-d0hflfFJ~5*^k{DUGz-*#QE575+-yvZY}KAYU5sFDu`hK`fe!aN z==tqqP`!8K?&}E=|Ex2q)2<65F}@~~Y*X&>?)jMTXOG!MVJ-2ym{;anm|hCAenhE9 z;pR=^A*pFCYt!^waMeQh_4O$R_d)ksI%B5-i5*Sw@!f0uJmV8=qe=G?-Bf+TDf9td zsp!jh@L5TQBEho2Ai=e;NqM1!PbXn;PB_iZIlfGq?D zPQeQw*F<*jt1D?bKDiP5X!xP;WB<{evB<9ED$}xUwCRuS70d57*z(6U<#7smX94B@kZYO*hfb0p_w6(QJ5)RUgF7HG`e|?&>H@JZG#7g%? zmbUKqYJe?E^)au{OcTF9v5C5U{Ui#;*qL^=&UrskVs${Qyx;gF%B~0^Zm()@V~PHz zlwlu9TYpv+Lh&Z(26nHIyHIG+Tr={in}--AVRc}gm=jh;veZnZ9h0q~MoK=Y3v?fH zHvev|-|7(P+55G|p z>|Xjg4`(W|^Rf-4*Lllnh>uT=Jy{fjEO61F5{*r{WL%;e1gnVTdP8(!EK!07zt5ZV z$G=^M(UPSHn6xSPx(3q=6;10x)82#Lf9w6MN9E^T#+EOPxm1kpT`Nr?vr^!* zOW}M>xeDp}&M^!X25)6j8X(J<1#}=!=Ti6j>RT-OZ~ALbR|efTD{D{tPruf|CZ2Q4 z5@8j~M{mcR?!FlvBZIncCdX`}`<)KX{NiSHqd(-njZOTyy}v4svhMevC9@`i_mf$J zCGi=SM4ZhE%~B^rh><;?wu5dpJ#Mv}+9x0|DCLsEOt41=!vrVN6rjMl1*-><$TAvV zbg_sUyRb_;co=`mJJl|A}?a(unDFjSzA%ly9auX$ z1E_82myW?1#Q{qBG}{3ikBq<(I9+6md(DyLz^%@27DKH%y9(>OGJUMxLii(_wjAQl z{$6y6)J!=E#KlBhdj;R7oFX;^w)>&cN{yg$jhV3MB<7ssw24k_T5vuEK6Z*b((Ezz rrUHT?`2tJp+sPBavZC8Wj}oRHrxb&(mEdEpqig=RcznFLzu)~|4b>)n delta 40259 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≻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 isset( $notification['isActive'] ) ? rgar( $notification, 'isActive') : true ); $is_update = true; @@ -861,7 +861,7 @@ private static function is_valid_notification_email($text){ $emails = explode(",", $text); foreach($emails as $email){ $email = trim($email); - $invalid_email = GFCommon::is_invalid_or_empty_email($email); + $invalid_email = GFCommon::is_invalid_or_empty_email( $email ); $invalid_variable = !preg_match('/^({[^{]*?:(\d+(\.\d+)?)(:(.*?))?},? *)+$/', $email); if($invalid_email && $invalid_variable) @@ -1045,7 +1045,12 @@ function prepare_items() { } function display() { - extract( $this->_args ); + + // ...causing issue: Notice: Indirect modification of overloaded property GFNotificationTable::$_args has no effect + //extract( $this->_args ); // gives us $plural, $singular, $ajax, $screen + + $singular = $this->_args['singular']; + ?>

          diff --git a/select_columns.php b/select_columns.php index f15a3c4..2ff54bc 100644 --- a/select_columns.php +++ b/select_columns.php @@ -125,7 +125,7 @@ function SelectColumns(){ foreach($form["fields"] as $field){ if(RGFormsModel::get_input_type($field) == "checkbox" && !in_array($field["id"], $field_ids)){ ?> -
        • ">
        • +
        • ">
        • -
        • ">
        • +
        • ">