Plugin Directory

Changeset 2817418


Ignore:
Timestamp:
11/14/2022 06:34:43 AM (3 years ago)
Author:
seersco
Message:

Fixing on privacy policy and banner positions

Location:
seers-cookie-consent-banner-privacy-policy
Files:
176 added
7 edited

Legend:

Unmodified
Added
Removed
  • seers-cookie-consent-banner-privacy-policy/tags/Development Versions/readme.txt

    r2811087 r2817418  
    55Requires at least: 3.8 or higher
    66Tested up to: 6.1.0
    7 Stable tag: 8.0.2
     7Stable tag: 8.0.3
    88Requires PHP: 5.3.3
    99Author URL: https://seersco.com
     
    183183== Changelog ==
    184184
     185VERSION 8.0.3
     186• Minor bugs fixing in Privacy Policy save
     187• Banner Layout position top and modal
     188
    185189VERSION 8.0.2
    186190• Minor bugs fixing in Activate and Deactivate
  • seers-cookie-consent-banner-privacy-policy/tags/Development Versions/seers-cookie-consent-banner-privacy-policy.php

    r2811087 r2817418  
    1111* Plugin URI: https://seersco.com/wp-cookie-plugin
    1212* Description: Seers cookie consent management platform is trusted by thousands of businesses. Become GDPR, CCPA, ePrivacy and LGPD compliant in three clicks.
    13 * Version: 8.0.2
     13* Version: 8.0.3
    1414* Author: Seers
    1515* Author URI: https://seersco.com/
     
    565565
    566566                                                $url = $this->apibaseurl . "get-banner-settings";
    567                                                 //$url = "https://seersco.here/api/get-banner-settings";
    568567                                                $postdata = json_encode($postData);
    569568                                                $result = wp_remote_post( $url, array(
     
    948947               
    949948                $accesstoken = get_option( 'SCCBPP_cookie_access_token' );
     949               
     950                //if (!$accesstoken) {
     951                   
     952                    $filterurl = $this->removeProtocol($cookie_consent_url);
     953                    $loginresponse = $this->loginFromSeers($cookie_consent_email, $filterurl);
     954                    // if accesstoken is in response
     955                    if (!empty($loginresponse->access_token)) {
     956                        //echo $loginresponse->access_token;
     957                        $accesstoken = $loginresponse->access_token;
     958                        update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
     959                        $showloginpopup = 'no';
     960                        $alreadyexistinseers = 'yes';
     961                    } else if (!empty($loginresponse->message)) {
     962                        //echo $loginresponse->message;
     963                        if (stripos($loginresponse->message, "Ask for password") !== false) {
     964                            // now check if we have already some password saved
     965                            $savedpassword = get_option( 'SCCBPP_cookie_userid_' . get_current_user_id() . '_pass');
     966                           
     967                            if ($savedpassword) {
     968                                $loginresponse = $this->loginFromSeers($cookie_consent_email, $savedpassword);
     969                               
     970                                if (!empty($loginresponse->access_token)) {
     971                                    //echo $loginresponse->access_token;
     972                                    update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
     973                                    $accesstoken = $loginresponse->access_token;
     974                                    $showloginpopup = 'no';
     975                                    $alreadyexistinseers = 'yes';
     976                                } else if (!empty($loginresponse->message)) {
     977                                   
     978                                    if (stripos($loginresponse->message, "Ask for password") !== false) {
     979                                        $showloginpopup = 'yes';
     980                                        $alreadyexistinseers = 'yes';
     981                                    } else {
     982                                        $showloginpopup = 'no';
     983                                        $alreadyexistinseers = 'no';
     984                                    }
     985                                   
     986                                   
     987                                }
     988                               
     989                            } else {
     990                                $showloginpopup = 'yes';
     991                                $alreadyexistinseers = 'yes';
     992                            }
     993                           
     994                           
     995                        } else {
     996                            $showloginpopup = 'no';
     997                            $alreadyexistinseers = 'no';
     998                        }
     999
     1000
     1001                    }
     1002                   
     1003                //}
     1004               
     1005                if ($accesstoken && $showloginpopup === 'no') {
     1006                   
     1007                    global $wpdb;
     1008                    $prefix = $wpdb->prefix;
     1009                    $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
     1010                    // $enable_policy = $enable_policy == "on"? true: false;
     1011                    $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
     1012
     1013
     1014
     1015                    $postData = array(
     1016                        'domain' => $cookie_consent_url,
     1017                        'email' => $cookie_consent_email,
     1018                        'platform' => 'wordpress',
     1019                        'policy_url' => $cookies_policy,
     1020                        'enable_policy' => $enable_policy
     1021                    );
     1022
     1023                    $request_headers = array(
     1024                        'Content-Type' => 'application/json',
     1025                        'Accept' => 'application/json',
     1026                        'Referer' => $cookie_consent_url,
     1027                    );
     1028                   
     1029                    if ($accesstoken && $alreadyexistinseers == "yes") {
     1030                        $request_headers = array(
     1031                            'Content-Type' => 'application/json',
     1032                            'Accept' => 'application/json',
     1033                            'Referer' => $cookie_consent_url,
     1034                            'Authorization' => 'Bearer ' . $accesstoken
     1035                        );
     1036                    }
     1037
     1038                    $url = $this->apibaseurl . "update-policy-url";
     1039                    $postdata = json_encode($postData);
     1040                    $result = wp_remote_post( $url, array(
     1041                            'method' => 'POST',
     1042                            'redirection' => 5,
     1043                            'httpversion' => '1.0',
     1044                            'timeout'     => 45,
     1045                            'sslverify' => false,
     1046                            'headers' => $request_headers,
     1047                            'body' => $postdata,
     1048                            'cookies' => array()
     1049                        )
     1050                    );
     1051
     1052
     1053                    if ( !is_wp_error( $result ) ) {
     1054                        $response = json_decode($result['body']);
     1055
     1056                        if ($response->message == 'Policy URL has been updated successfully') {
     1057
     1058                            $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
     1059
     1060
     1061
     1062                                update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
     1063
     1064                            $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
     1065
     1066                                    update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
     1067
     1068                                    // update policy url in cdn also by update banner customization
     1069                                    $this->SCCBPP_policy_update((($enable_policy == "true" || $enable_policy === true) ? $cookies_policy : "" ));
     1070
     1071                                    if ($enable_policy == "true" || $enable_policy === true ) {
     1072                                        echo __('Cookies policy added successfully.', $this->textdomain);
     1073                                    } else {
     1074                                        echo __('Cookies policy disabled successfully.', $this->textdomain);
     1075                                    }
     1076
     1077                        } else {
     1078                           
     1079                            //if response is Unauthenticated then its mean to show login form again
     1080                            if (stripos($response->message, "Unauthenticated") !== false) {
     1081                                update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
     1082                                echo __('Please login again.', $this->textdomain);
     1083                            } else {
     1084                                echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
     1085                            }
     1086                        }
     1087
     1088                    } else {
     1089                        echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
     1090                    }
     1091                   
     1092                } else {
     1093                    update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
     1094                    echo __('Please login again.', $this->textdomain);
     1095                }
     1096
     1097               
     1098            } else {
     1099                $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
     1100                // $enable_policy = $enable_policy == "on"? true: false;
     1101                $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
     1102               
     1103                $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
     1104                   
     1105                    update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
     1106
     1107                if($enable_policy == "true" || $enable_policy === true ){
     1108
     1109                   $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
     1110                   
     1111                        update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
     1112                       
     1113                        //now banner settings are updated
     1114                        update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
     1115
     1116                    echo __('Cookies policy added successfully.', $this->textdomain);
     1117                } else {
     1118                    $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
     1119                    update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
     1120                   
     1121                    //now banner settings are updated
     1122                    update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
     1123                   
     1124                    echo __('Cookies policy disabled successfully.', $this->textdomain);
     1125                }
     1126            }
     1127            exit;
     1128
     1129        }
     1130        function cookies_setting()
     1131        {
     1132           
     1133            $cookie_consent_url = get_option('SCCBPP_cookie_consent_url');
     1134            $cookie_consent_email = get_option('SCCBPP_cookie_consent_email');
     1135           
     1136            $cookie_consent_code = get_option('SCCBPP_cookie_consent_id');
     1137
     1138            if (!empty($cookie_consent_code)) {
     1139               
     1140                $accesstoken = get_option( 'SCCBPP_cookie_access_token' );
     1141                $getseersbanner = true;
     1142                $keepwpbanner = true;
     1143                $alreadyexistinseers = 'no';
     1144                $showloginpopup = 'no';
    9501145               
    9511146                //if (!$accesstoken) {
     
    10061201                    global $wpdb;
    10071202                    $prefix = $wpdb->prefix;
    1008                     $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
    1009                     // $enable_policy = $enable_policy == "on"? true: false;
    1010                     $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
    1011 
    1012 
    1013 
    1014                     $postData = array(
    1015                         'domain' => $cookie_consent_url,
    1016                         'email' => $cookie_consent_email,
    1017                         'platform' => 'wordpress',
    1018                         'policy_url' => $cookies_policy,
    1019                         'enable_policy' => $enable_policy
    1020                     );
    1021 
    1022                     $request_headers = array(
    1023                         'Content-Type' => 'application/json',
    1024                         'Accept' => 'application/json',
    1025                         'Referer' => $cookie_consent_url,
    1026                     );
    1027                    
    1028                     if ($accesstoken && $alreadyexistinseers == "yes") {
    1029                         $request_headers = array(
    1030                             'Content-Type' => 'application/json',
    1031                             'Accept' => 'application/json',
    1032                             'Referer' => $cookie_consent_url,
    1033                             'Authorization' => 'Bearer ' . $accesstoken
    1034                         );
    1035                     }
    1036 
    1037                     $url = $this->apibaseurl . "update-policy-url";
    1038                     $postdata = json_encode($postData);
    1039                     $result = wp_remote_post( $url, array(
    1040                             'method' => 'POST',
    1041                             'redirection' => 5,
    1042                             'httpversion' => '1.0',
    1043                             'timeout'     => 45,
    1044                             'sslverify' => false,
    1045                             'headers' => $request_headers,
    1046                             'body' => $postdata,
    1047                             'cookies' => array()
    1048                         )
    1049                     );
    1050 
    1051 
    1052                     if ( !is_wp_error( $result ) ) {
    1053                         $response = json_decode($result['body']);
    1054 
    1055                         if ($response->message == 'Policy URL has been updated successfully') {
    1056 
    1057                             $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
    1058 
    1059 
    1060 
    1061                                 update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
    1062 
    1063                             $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
    1064 
    1065                                     update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
    1066 
    1067                                     // update policy url in cdn also by update banner customization
    1068                                     $this->SCCBPP_policy_update((($enable_policy == "true" || $enable_policy === true) ? $cookies_policy : "" ));
    1069 
    1070                                     if ($enable_policy == "true" || $enable_policy === true ) {
    1071                                         echo __('Cookies policy added successfully.', $this->textdomain);
    1072                                     } else {
    1073                                         echo __('Cookies policy disabled successfully.', $this->textdomain);
    1074                                     }
    1075 
    1076                         } else {
    1077                            
    1078                             //if response is Unauthenticated then its mean to show login form again
    1079                             if (stripos($response->message, "Unauthenticated") !== false) {
    1080                                 update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
    1081                                 echo __('Please login again.', $this->textdomain);
    1082                             } else {
    1083                                 echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
    1084                             }
    1085                         }
    1086 
    1087                     } else {
    1088                         echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
    1089                     }
    1090                    
    1091                 } else {
    1092                     update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
    1093                     echo __('Please login again.', $this->textdomain);
    1094                 }
    1095 
    1096                
    1097             } else {
    1098                 $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
    1099                 // $enable_policy = $enable_policy == "on"? true: false;
    1100                 $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
    1101                
    1102                 $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
    1103                    
    1104                     update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
    1105 
    1106                 if($enable_policy == "true" || $enable_policy === true ){
    1107 
    1108                    $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
    1109                    
    1110                         update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
    1111                        
    1112                         //now banner settings are updated
    1113                         update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
    1114 
    1115                     echo __('Cookies policy added successfully.', $this->textdomain);
    1116                 } else {
    1117                     $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
    1118                     update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
    1119                    
    1120                     //now banner settings are updated
    1121                     update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
    1122                    
    1123                     echo __('Cookies policy disabled successfully.', $this->textdomain);
    1124                 }
    1125             }
    1126             exit;
    1127 
    1128         }
    1129         function cookies_setting()
    1130         {
    1131            
    1132             $cookie_consent_url = get_option('SCCBPP_cookie_consent_url');
    1133             $cookie_consent_email = get_option('SCCBPP_cookie_consent_email');
    1134            
    1135             $cookie_consent_code = get_option('SCCBPP_cookie_consent_id');
    1136 
    1137             if (!empty($cookie_consent_code)) {
    1138                
    1139                 $accesstoken = get_option( 'SCCBPP_cookie_access_token' );
    1140                 $getseersbanner = true;
    1141                 $keepwpbanner = true;
    1142                 $alreadyexistinseers = 'no';
    1143                 $showloginpopup = 'no';
    1144                
    1145                 //if (!$accesstoken) {
    1146                    
    1147                     $filterurl = $this->removeProtocol($cookie_consent_url);
    1148                     $loginresponse = $this->loginFromSeers($cookie_consent_email, $filterurl);
    1149                     // if accesstoken is in response
    1150                     if (!empty($loginresponse->access_token)) {
    1151                         //echo $loginresponse->access_token;
    1152                         $accesstoken = $loginresponse->access_token;
    1153                         update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
    1154                     } else if (!empty($loginresponse->message)) {
    1155                         //echo $loginresponse->message;
    1156                         if (stripos($loginresponse->message, "Ask for password") !== false) {
    1157                             // now check if we have already some password saved
    1158                             $savedpassword = get_option( 'SCCBPP_cookie_userid_' . get_current_user_id() . '_pass');
    1159                            
    1160                             if ($savedpassword) {
    1161                                 $loginresponse = $this->loginFromSeers($cookie_consent_email, $savedpassword);
    1162                                
    1163                                 if (!empty($loginresponse->access_token)) {
    1164                                     //echo $loginresponse->access_token;
    1165                                     update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
    1166                                     $accesstoken = $loginresponse->access_token;
    1167                                     $showloginpopup = 'no';
    1168                                     $alreadyexistinseers = 'yes';
    1169                                 } else if (!empty($loginresponse->message)) {
    1170                                    
    1171                                     if (stripos($loginresponse->message, "Ask for password") !== false) {
    1172                                         $showloginpopup = 'yes';
    1173                                         $alreadyexistinseers = 'yes';
    1174                                     } else {
    1175                                         $showloginpopup = 'no';
    1176                                         $alreadyexistinseers = 'no';
    1177                                     }
    1178                                    
    1179                                    
    1180                                 }
    1181                                
    1182                             } else {
    1183                                 $showloginpopup = 'yes';
    1184                                 $alreadyexistinseers = 'yes';
    1185                             }
    1186                            
    1187                            
    1188                         } else {
    1189                             $showloginpopup = 'no';
    1190                             $alreadyexistinseers = 'no';
    1191                         }
    1192 
    1193 
    1194                     }
    1195                    
    1196                 //}
    1197                
    1198                 if ($accesstoken && $showloginpopup === 'no') {
    1199                    
    1200                     global $wpdb;
    1201                     $prefix = $wpdb->prefix;
    12021203                    $result ='';
    12031204                    $postData = array(
     
    12241225
    12251226                    $url = $this->apibaseurl . "get-banner-settings";
    1226                     //$url = "https://seersco.here/api/get-banner-settings";
    12271227                    $postdata = json_encode($postData);
    12281228                    $result = wp_remote_post( $url, array(
     
    24772477                        $accesstoken = $loginresponse->access_token;
    24782478                        update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
     2479                        $showloginpopup = 'no';
     2480                        $alreadyexistinseers = 'yes';
    24792481                    } else if (!empty($loginresponse->message)) {
    24802482                        //echo $loginresponse->message;
  • seers-cookie-consent-banner-privacy-policy/tags/Development Versions/templates/frontend-popup.php

    r2811087 r2817418  
    287287        @-ms-keyframes seers-cmp-slide-in-top-bar{from{-webkit-transform:translate3d(0,-100%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
    288288        @-o-keyframes seers-cmp-slide-in-top-bar{from{-webkit-transform:translate3d(0,-100%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     289       
     290       
     291        @keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     292        @-webkit-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     293        @-moz-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     294        @-ms-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     295        @-o-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
    289296       
    290297       
     
    18231830        .seers-cmp-cookie-data-hol .seers-cmp-banner-bar-hide-noanimation {
    18241831            display:none;
     1832        }
     1833       
     1834        .seers-cmp-banner-bar.seers-cmp-middle-bar.seers-cmp-banner-bar-hide {
     1835            display: none;
     1836        }
     1837       
     1838        .seers-cmp-cookie-data-hol .seers-cmp-top-bar.seers-cmp-banner-bar-hide {
     1839            display: none;
    18251840        }
    18261841    </style>
  • seers-cookie-consent-banner-privacy-policy/trunk/readme.txt

    r2811087 r2817418  
    55Requires at least: 3.8 or higher
    66Tested up to: 6.1.0
    7 Stable tag: 8.0.2
     7Stable tag: 8.0.3
    88Requires PHP: 5.3.3
    99Author URL: https://seersco.com
     
    183183== Changelog ==
    184184
     185VERSION 8.0.3
     186• Minor bugs fixing in Privacy Policy save
     187• Banner Layout position top and modal
     188
    185189VERSION 8.0.2
    186190• Minor bugs fixing in Activate and Deactivate
  • seers-cookie-consent-banner-privacy-policy/trunk/seers-cookie-consent-banner-privacy-policy.php

    r2811087 r2817418  
    1111* Plugin URI: https://seersco.com/wp-cookie-plugin
    1212* Description: Seers cookie consent management platform is trusted by thousands of businesses. Become GDPR, CCPA, ePrivacy and LGPD compliant in three clicks.
    13 * Version: 8.0.2
     13* Version: 8.0.3
    1414* Author: Seers
    1515* Author URI: https://seersco.com/
     
    565565
    566566                                                $url = $this->apibaseurl . "get-banner-settings";
    567                                                 //$url = "https://seersco.here/api/get-banner-settings";
    568567                                                $postdata = json_encode($postData);
    569568                                                $result = wp_remote_post( $url, array(
     
    948947               
    949948                $accesstoken = get_option( 'SCCBPP_cookie_access_token' );
     949               
     950                //if (!$accesstoken) {
     951                   
     952                    $filterurl = $this->removeProtocol($cookie_consent_url);
     953                    $loginresponse = $this->loginFromSeers($cookie_consent_email, $filterurl);
     954                    // if accesstoken is in response
     955                    if (!empty($loginresponse->access_token)) {
     956                        //echo $loginresponse->access_token;
     957                        $accesstoken = $loginresponse->access_token;
     958                        update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
     959                        $showloginpopup = 'no';
     960                        $alreadyexistinseers = 'yes';
     961                    } else if (!empty($loginresponse->message)) {
     962                        //echo $loginresponse->message;
     963                        if (stripos($loginresponse->message, "Ask for password") !== false) {
     964                            // now check if we have already some password saved
     965                            $savedpassword = get_option( 'SCCBPP_cookie_userid_' . get_current_user_id() . '_pass');
     966                           
     967                            if ($savedpassword) {
     968                                $loginresponse = $this->loginFromSeers($cookie_consent_email, $savedpassword);
     969                               
     970                                if (!empty($loginresponse->access_token)) {
     971                                    //echo $loginresponse->access_token;
     972                                    update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
     973                                    $accesstoken = $loginresponse->access_token;
     974                                    $showloginpopup = 'no';
     975                                    $alreadyexistinseers = 'yes';
     976                                } else if (!empty($loginresponse->message)) {
     977                                   
     978                                    if (stripos($loginresponse->message, "Ask for password") !== false) {
     979                                        $showloginpopup = 'yes';
     980                                        $alreadyexistinseers = 'yes';
     981                                    } else {
     982                                        $showloginpopup = 'no';
     983                                        $alreadyexistinseers = 'no';
     984                                    }
     985                                   
     986                                   
     987                                }
     988                               
     989                            } else {
     990                                $showloginpopup = 'yes';
     991                                $alreadyexistinseers = 'yes';
     992                            }
     993                           
     994                           
     995                        } else {
     996                            $showloginpopup = 'no';
     997                            $alreadyexistinseers = 'no';
     998                        }
     999
     1000
     1001                    }
     1002                   
     1003                //}
     1004               
     1005                if ($accesstoken && $showloginpopup === 'no') {
     1006                   
     1007                    global $wpdb;
     1008                    $prefix = $wpdb->prefix;
     1009                    $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
     1010                    // $enable_policy = $enable_policy == "on"? true: false;
     1011                    $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
     1012
     1013
     1014
     1015                    $postData = array(
     1016                        'domain' => $cookie_consent_url,
     1017                        'email' => $cookie_consent_email,
     1018                        'platform' => 'wordpress',
     1019                        'policy_url' => $cookies_policy,
     1020                        'enable_policy' => $enable_policy
     1021                    );
     1022
     1023                    $request_headers = array(
     1024                        'Content-Type' => 'application/json',
     1025                        'Accept' => 'application/json',
     1026                        'Referer' => $cookie_consent_url,
     1027                    );
     1028                   
     1029                    if ($accesstoken && $alreadyexistinseers == "yes") {
     1030                        $request_headers = array(
     1031                            'Content-Type' => 'application/json',
     1032                            'Accept' => 'application/json',
     1033                            'Referer' => $cookie_consent_url,
     1034                            'Authorization' => 'Bearer ' . $accesstoken
     1035                        );
     1036                    }
     1037
     1038                    $url = $this->apibaseurl . "update-policy-url";
     1039                    $postdata = json_encode($postData);
     1040                    $result = wp_remote_post( $url, array(
     1041                            'method' => 'POST',
     1042                            'redirection' => 5,
     1043                            'httpversion' => '1.0',
     1044                            'timeout'     => 45,
     1045                            'sslverify' => false,
     1046                            'headers' => $request_headers,
     1047                            'body' => $postdata,
     1048                            'cookies' => array()
     1049                        )
     1050                    );
     1051
     1052
     1053                    if ( !is_wp_error( $result ) ) {
     1054                        $response = json_decode($result['body']);
     1055
     1056                        if ($response->message == 'Policy URL has been updated successfully') {
     1057
     1058                            $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
     1059
     1060
     1061
     1062                                update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
     1063
     1064                            $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
     1065
     1066                                    update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
     1067
     1068                                    // update policy url in cdn also by update banner customization
     1069                                    $this->SCCBPP_policy_update((($enable_policy == "true" || $enable_policy === true) ? $cookies_policy : "" ));
     1070
     1071                                    if ($enable_policy == "true" || $enable_policy === true ) {
     1072                                        echo __('Cookies policy added successfully.', $this->textdomain);
     1073                                    } else {
     1074                                        echo __('Cookies policy disabled successfully.', $this->textdomain);
     1075                                    }
     1076
     1077                        } else {
     1078                           
     1079                            //if response is Unauthenticated then its mean to show login form again
     1080                            if (stripos($response->message, "Unauthenticated") !== false) {
     1081                                update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
     1082                                echo __('Please login again.', $this->textdomain);
     1083                            } else {
     1084                                echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
     1085                            }
     1086                        }
     1087
     1088                    } else {
     1089                        echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
     1090                    }
     1091                   
     1092                } else {
     1093                    update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
     1094                    echo __('Please login again.', $this->textdomain);
     1095                }
     1096
     1097               
     1098            } else {
     1099                $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
     1100                // $enable_policy = $enable_policy == "on"? true: false;
     1101                $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
     1102               
     1103                $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
     1104                   
     1105                    update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
     1106
     1107                if($enable_policy == "true" || $enable_policy === true ){
     1108
     1109                   $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
     1110                   
     1111                        update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
     1112                       
     1113                        //now banner settings are updated
     1114                        update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
     1115
     1116                    echo __('Cookies policy added successfully.', $this->textdomain);
     1117                } else {
     1118                    $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
     1119                    update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
     1120                   
     1121                    //now banner settings are updated
     1122                    update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
     1123                   
     1124                    echo __('Cookies policy disabled successfully.', $this->textdomain);
     1125                }
     1126            }
     1127            exit;
     1128
     1129        }
     1130        function cookies_setting()
     1131        {
     1132           
     1133            $cookie_consent_url = get_option('SCCBPP_cookie_consent_url');
     1134            $cookie_consent_email = get_option('SCCBPP_cookie_consent_email');
     1135           
     1136            $cookie_consent_code = get_option('SCCBPP_cookie_consent_id');
     1137
     1138            if (!empty($cookie_consent_code)) {
     1139               
     1140                $accesstoken = get_option( 'SCCBPP_cookie_access_token' );
     1141                $getseersbanner = true;
     1142                $keepwpbanner = true;
     1143                $alreadyexistinseers = 'no';
     1144                $showloginpopup = 'no';
    9501145               
    9511146                //if (!$accesstoken) {
     
    10061201                    global $wpdb;
    10071202                    $prefix = $wpdb->prefix;
    1008                     $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
    1009                     // $enable_policy = $enable_policy == "on"? true: false;
    1010                     $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
    1011 
    1012 
    1013 
    1014                     $postData = array(
    1015                         'domain' => $cookie_consent_url,
    1016                         'email' => $cookie_consent_email,
    1017                         'platform' => 'wordpress',
    1018                         'policy_url' => $cookies_policy,
    1019                         'enable_policy' => $enable_policy
    1020                     );
    1021 
    1022                     $request_headers = array(
    1023                         'Content-Type' => 'application/json',
    1024                         'Accept' => 'application/json',
    1025                         'Referer' => $cookie_consent_url,
    1026                     );
    1027                    
    1028                     if ($accesstoken && $alreadyexistinseers == "yes") {
    1029                         $request_headers = array(
    1030                             'Content-Type' => 'application/json',
    1031                             'Accept' => 'application/json',
    1032                             'Referer' => $cookie_consent_url,
    1033                             'Authorization' => 'Bearer ' . $accesstoken
    1034                         );
    1035                     }
    1036 
    1037                     $url = $this->apibaseurl . "update-policy-url";
    1038                     $postdata = json_encode($postData);
    1039                     $result = wp_remote_post( $url, array(
    1040                             'method' => 'POST',
    1041                             'redirection' => 5,
    1042                             'httpversion' => '1.0',
    1043                             'timeout'     => 45,
    1044                             'sslverify' => false,
    1045                             'headers' => $request_headers,
    1046                             'body' => $postdata,
    1047                             'cookies' => array()
    1048                         )
    1049                     );
    1050 
    1051 
    1052                     if ( !is_wp_error( $result ) ) {
    1053                         $response = json_decode($result['body']);
    1054 
    1055                         if ($response->message == 'Policy URL has been updated successfully') {
    1056 
    1057                             $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
    1058 
    1059 
    1060 
    1061                                 update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
    1062 
    1063                             $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
    1064 
    1065                                     update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
    1066 
    1067                                     // update policy url in cdn also by update banner customization
    1068                                     $this->SCCBPP_policy_update((($enable_policy == "true" || $enable_policy === true) ? $cookies_policy : "" ));
    1069 
    1070                                     if ($enable_policy == "true" || $enable_policy === true ) {
    1071                                         echo __('Cookies policy added successfully.', $this->textdomain);
    1072                                     } else {
    1073                                         echo __('Cookies policy disabled successfully.', $this->textdomain);
    1074                                     }
    1075 
    1076                         } else {
    1077                            
    1078                             //if response is Unauthenticated then its mean to show login form again
    1079                             if (stripos($response->message, "Unauthenticated") !== false) {
    1080                                 update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
    1081                                 echo __('Please login again.', $this->textdomain);
    1082                             } else {
    1083                                 echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
    1084                             }
    1085                         }
    1086 
    1087                     } else {
    1088                         echo __('Some thing went wrong. Please check url and try again', $this->textdomain);
    1089                     }
    1090                    
    1091                 } else {
    1092                     update_option( 'SCCBPP_cookie_consent_showloginpopup', 'show' );
    1093                     echo __('Please login again.', $this->textdomain);
    1094                 }
    1095 
    1096                
    1097             } else {
    1098                 $enable_policy  =   sanitize_text_field($_POST['enable_policy']);
    1099                 // $enable_policy = $enable_policy == "on"? true: false;
    1100                 $cookies_policy =  sanitize_text_field($_POST['cookies_url']);
    1101                
    1102                 $existEnablePolicy = get_option('SCCBPP_cookie_consent_enable_policy');
    1103                    
    1104                     update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
    1105 
    1106                 if($enable_policy == "true" || $enable_policy === true ){
    1107 
    1108                    $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
    1109                    
    1110                         update_option('SCCBPP_cookie_consent_policy_declaration_url', $cookies_policy);
    1111                        
    1112                         //now banner settings are updated
    1113                         update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
    1114 
    1115                     echo __('Cookies policy added successfully.', $this->textdomain);
    1116                 } else {
    1117                     $existUrl = get_option('SCCBPP_cookie_consent_policy_declaration_url');
    1118                     update_option('SCCBPP_cookie_consent_enable_policy', $enable_policy);
    1119                    
    1120                     //now banner settings are updated
    1121                     update_option('SCCBPP_cookie_consent_defaultsettings', 'changed');
    1122                    
    1123                     echo __('Cookies policy disabled successfully.', $this->textdomain);
    1124                 }
    1125             }
    1126             exit;
    1127 
    1128         }
    1129         function cookies_setting()
    1130         {
    1131            
    1132             $cookie_consent_url = get_option('SCCBPP_cookie_consent_url');
    1133             $cookie_consent_email = get_option('SCCBPP_cookie_consent_email');
    1134            
    1135             $cookie_consent_code = get_option('SCCBPP_cookie_consent_id');
    1136 
    1137             if (!empty($cookie_consent_code)) {
    1138                
    1139                 $accesstoken = get_option( 'SCCBPP_cookie_access_token' );
    1140                 $getseersbanner = true;
    1141                 $keepwpbanner = true;
    1142                 $alreadyexistinseers = 'no';
    1143                 $showloginpopup = 'no';
    1144                
    1145                 //if (!$accesstoken) {
    1146                    
    1147                     $filterurl = $this->removeProtocol($cookie_consent_url);
    1148                     $loginresponse = $this->loginFromSeers($cookie_consent_email, $filterurl);
    1149                     // if accesstoken is in response
    1150                     if (!empty($loginresponse->access_token)) {
    1151                         //echo $loginresponse->access_token;
    1152                         $accesstoken = $loginresponse->access_token;
    1153                         update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
    1154                     } else if (!empty($loginresponse->message)) {
    1155                         //echo $loginresponse->message;
    1156                         if (stripos($loginresponse->message, "Ask for password") !== false) {
    1157                             // now check if we have already some password saved
    1158                             $savedpassword = get_option( 'SCCBPP_cookie_userid_' . get_current_user_id() . '_pass');
    1159                            
    1160                             if ($savedpassword) {
    1161                                 $loginresponse = $this->loginFromSeers($cookie_consent_email, $savedpassword);
    1162                                
    1163                                 if (!empty($loginresponse->access_token)) {
    1164                                     //echo $loginresponse->access_token;
    1165                                     update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
    1166                                     $accesstoken = $loginresponse->access_token;
    1167                                     $showloginpopup = 'no';
    1168                                     $alreadyexistinseers = 'yes';
    1169                                 } else if (!empty($loginresponse->message)) {
    1170                                    
    1171                                     if (stripos($loginresponse->message, "Ask for password") !== false) {
    1172                                         $showloginpopup = 'yes';
    1173                                         $alreadyexistinseers = 'yes';
    1174                                     } else {
    1175                                         $showloginpopup = 'no';
    1176                                         $alreadyexistinseers = 'no';
    1177                                     }
    1178                                    
    1179                                    
    1180                                 }
    1181                                
    1182                             } else {
    1183                                 $showloginpopup = 'yes';
    1184                                 $alreadyexistinseers = 'yes';
    1185                             }
    1186                            
    1187                            
    1188                         } else {
    1189                             $showloginpopup = 'no';
    1190                             $alreadyexistinseers = 'no';
    1191                         }
    1192 
    1193 
    1194                     }
    1195                    
    1196                 //}
    1197                
    1198                 if ($accesstoken && $showloginpopup === 'no') {
    1199                    
    1200                     global $wpdb;
    1201                     $prefix = $wpdb->prefix;
    12021203                    $result ='';
    12031204                    $postData = array(
     
    12241225
    12251226                    $url = $this->apibaseurl . "get-banner-settings";
    1226                     //$url = "https://seersco.here/api/get-banner-settings";
    12271227                    $postdata = json_encode($postData);
    12281228                    $result = wp_remote_post( $url, array(
     
    24772477                        $accesstoken = $loginresponse->access_token;
    24782478                        update_option( 'SCCBPP_cookie_access_token', $loginresponse->access_token );
     2479                        $showloginpopup = 'no';
     2480                        $alreadyexistinseers = 'yes';
    24792481                    } else if (!empty($loginresponse->message)) {
    24802482                        //echo $loginresponse->message;
  • seers-cookie-consent-banner-privacy-policy/trunk/templates/frontend-popup.php

    r2811087 r2817418  
    287287        @-ms-keyframes seers-cmp-slide-in-top-bar{from{-webkit-transform:translate3d(0,-100%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
    288288        @-o-keyframes seers-cmp-slide-in-top-bar{from{-webkit-transform:translate3d(0,-100%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     289       
     290       
     291        @keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     292        @-webkit-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     293        @-moz-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     294        @-ms-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
     295        @-o-keyframes seers-cmp-slide-out-top-bar{from{-webkit-transform:translate3d(0,1%,0);-moz-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);-o-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{-webkit-transform:translate3d(0,0%,0);-moz-transform:translate3d(0,0%,0);-ms-transform:translate3d(0,0%,0);-o-transform:translate3d(0,0%,0);transform:translate3d(0,0%,0)}}
    289296       
    290297       
     
    18231830        .seers-cmp-cookie-data-hol .seers-cmp-banner-bar-hide-noanimation {
    18241831            display:none;
     1832        }
     1833       
     1834        .seers-cmp-banner-bar.seers-cmp-middle-bar.seers-cmp-banner-bar-hide {
     1835            display: none;
     1836        }
     1837       
     1838        .seers-cmp-cookie-data-hol .seers-cmp-top-bar.seers-cmp-banner-bar-hide {
     1839            display: none;
    18251840        }
    18261841    </style>
  • seers-cookie-consent-banner-privacy-policy/tsvnsync.tsex

    r2811087 r2817418  
    1 c31bf1e6e2b2933092c3304c7734c12ed6cbe4ae0581be23b4ca97c52a7d76e11826407fd2896fe8dcc2894e8abb3fedc9a50ae67d52a0683f1a94eb2194d7507ecdc901a81b9e211937928f71fab0d05e01c0c420f38ec9eed8ec596858e1a75ac3a1471d67a276d965a39ca3a033810309359eabf3c1aa2643ce1f877bed59c1a076f2dcd9846d30ba2f1366e37c01280160939520632bd13936911fc82a70f981369ffe440005a999856cb93adde0d0f76533d262087745ddad43e895d87867a0e03fb670047ee52163412c60916b218bc1265535462c58bd2a3af82bdf21038a82384a211c43997a1908122e9afa1876c9431d0088837d4c3942863bf0dbdae5656f682d2fc49351a966eb70335aef43fae32a9292f10628f2abfe754c9455041dda46a8d84c67ea80788cfd990262b5370d9f09090e11ff9eb48f58ce5e4cb9097c246202aeba07df619ca114c1f8ab0166ee993e3d5e152dc7b9ad60ff72c9aa904f34c72d7ae8a37cba042863cc15fcd9fd12e4e89dc96ecdb95cc96d60fbdbb5a0efe363adaabf0568f266024116acdfebd1da96f43164dd53e393e311c7dcb09d4d9d644ed944f8d419aec720e02afbacafd165631cac54edce668db9bb6c18fe3cbb282094ea1980dfc94a9f48202067e9aa218fb43dc128e4a9b6be67f918433b01cf8a027a056f423e24a1edabf45e859aedb6445bd2df72711b1756062284fd53b16a98eb639ca54c511890ba45bde40d12ec928dc02f63283d32cb4cadc12a0f4c16dd0b472185f4818cb8a4809bcd8dda4d45f46e55eb45df3687694c33a9fc5db05ed987441f82db5b7115a8ca4445d2342dcef511e8ed02da7c933cce4bed7c933b07bc3b5c997b68c2cf2832a136dabfb202be443c9a9a27d758778db5bca1d6a7a8d8ec5768fb19bee8649889e1c25b5ac94ef9030d829c6015f31dce36ce4fd61ff3fdefb20e4b2c20b37aceeeecfe66b0559807558d0aef1f8b58874d66a480c819cc84a37396e373c697d02abee52dfd630ac4e9e6c7750669be112da2788ec1e4bb1d3ba1072e7b60ae979f2b9b94be56d5f36dd9ed7b87754868b6526270aeb29b6c0e5e7706b94bc7eabea6c2b654bb296146ff9b1dbebe76dfb0298be8fb64b3037537de17132f56eef405fb00e2defffbe84f28c5381bfeac6c50d17099ca4f7c0d7a41c980082d05745cdc8018281261060a4f369126bce480ea5b263585fe2be4f127d1feb751ed88cf07a4d5484ccbf84d67c9040fe2cc29ff38ea97fc5ee43f2d04cfb36ddc4329ad60533687fdfe30f10a10ae7ffe10a97cf9312c7489b7cb91b5a12e334595200d331079ee3f85dfcd9482f6c276deda145fc11404baa8e29658b68d454322b499261fa986c3456ed08af84614e612e019510fb5eb9511beee77d9114c6d8f923c3d488d3c3110d7b8600f38b457d4508f7a5da5fabd0a304ffdc48da9ba1375faae3e0d3099333572defaadd542bc7f11f0f3b543cc2f16dd04141f2fae54d8724dc3f49d6544b4be166f857b7a6bd72353509332b7ac4a35e781260a17aaa5a126a28eaacc853df80ab3d4cc42ef901ea0fbb87f870105e4d57aeb0d7cf880eef6c9e7e4688e948b0c5a7d8e51726ca8f28285ffafbb7bbeb7306c376bb27bcb2cab5d04ef81152324d6aed9a7c86f584fee32f38e61f38c7f7204962ac684014f2c0e48deedaedbf1a89cb040ed58fc89a7775a94f3bfa2c0e051deaf33f8d364529d4bfade83bbd18e5f9b6fa39490ca256db0a4f239881d2db068ec4b0725247f69480667d6b9c914063d931d2e0968945eea823c3897e5b1d740f3032945a20a414446dac626f925b882bbf78f2f85280af145b50ffbb1d697285d4a45916a45adbdff471723a3834120f54796795839f6aa7aba16e402260ba859f55483d7da37f0635e4432cd85dfb21fdecb8fae48bd2cd7e7f30b40ee9464d5fb1df25b5100a462e68b622a7921563c1efaebaf317923c3fdb3168427cdacc9e019fb3513c75578cfc00d0fd18736458c548e7732cc3fbc3168c168359356878762396de5ef3af2f17456af511b619d60fa48f24fdc6602f049e5b53b0e914ebb58b73331edb5c859cdfc4ecd60be58d7106317a58340cccddc5f66ff32443ec753fb466255eae8f42aefe796126251880d47edc496df1e18976d0bce5fe5bbe8dc0c40f460eb47b478f5d1c81897192ac8f635e7c6adb56924b8909cf00398f7f6c9cab55ac53098de4c859be748fc831e77054606ed556032af619fd57aed3ba536b45bc58a76fb4ac6912398219f22dce33d64e14186dda2df4c21262028f1cb6070cadbaa3299f8f3ee7753db746721cee1d2432ee7da3538ed9fddfb5c17215a7b81eb0f60f6eba677b91a746417692ebf111507de5d5075114320f0c028d7fbde30e24ed12544168895b9e67d0252dff804a8973a9b63e85d07ea54ae52e631dad1d99a53ce43191fa4e8e6a03298a48006c4d71ab16f3abbcc67af6d29378db2d3703ae9ad2444cbff83cd9925fd30de6939a9b596c0b21b47c96eb5c6b7512a7b633c795e77af989bfbf11985dfc540bc04a398801b15cd46e5c86e70722aefbc902a3d3ccfa52ec1d60c2954075c7a7f3f57e711fea4d5c7f020602517dab4baf82bb1b5c231cd62ff2f43099539ddfbb7daa5ca65364d2212edc699c0db8c0f26fd42100adfaa76eed10d8eff5fe804307152626c350719084664e8b48a5c78bcdd62ff5ba2b6878629936b4405626e6807b58d822f0f629b0a5bb2184a6c9ddf7d5d45f5f38531b51c346cbf66649cf05761dc5cacb653bf26e5434db0760b1b0fa205f90bcb6800815bc2da22a9a85c20d1c0b683dd0b5712e9e561d8999a3226d0ab2549d9b02bc4edbf94c50e4cd41d04f6e52ed9a09386548e560141b5e5990e55135c4ac1ce859acb0cf883a1f873aee8074df266f2c02fa2e534711533451124cb75bf6399ad6d57b03489c1a9c5757eb9320610570b6fed4e889ee380adaa5b8b628814e183247356f81b2ca812f925d1f2030223fb0534b564ebb005bb14510ff28e2d9b5e259c9267cd1d304ea86a48b99558d3fa103e0ae6bd579e93b57705276dd4777e5e7c564da13dde6f1c7de7d0a18fecc6c659e4c58bf996982829674b628708d760889a72425e756a3d22f98f243325b518364cea358b14124dca9d3614469f92e73fdb067dfba551449ac26dd682635d02eddd2bb1448e995b8966f66f119c40270f8a1972ded76395cac9795def19c4b28d9029e8c39d03ca3b2dc37861b5f58a4fb82321dfe424b3839db8b66d7b80075624cf400888731c60eb1b173bac99ffb8390f903625a6cdd41e0ea91a79363edc822c2752d5ca48b396a2590edd5239788760ebcdac81a1ccd21e6d27d440fb4bd8228aa817389ee397f7a6cd6139ec0aa94857a1c0b6c2036fe53cda46ca687537263d1478ca80441a1548479be4c55c4974b0925ab88034d9f6308d4cf21f1c62d600c49c69cf4a4e878d6dd52efe6f0e58ccf093affbc85c67fa55d3d679f03b4d4a108481d576d88e3a0bdf6b72400fc73fd5475fe7abc80fa888407a2fde575bdd7c9b08e99f777d6e7e8fd2c09107cf37d49e5c6fa562607eadd5837cd40e8ac755100ed308c4273e71b9e70e4bcc7fed7d46fe898dee537e177620af9afb6792757846a536d790b17adfe719a642d74dbaa34ff8ad66dd82ad3d9667151254b0cb788d1c421e4937f5751af9fbf4b89804a0792003fea7c3cba075748065d212ee364d6f1a5829088166eb79016728c972f025c67396841dd7626634d2be46a931241dc47d9c96d7084a2725de476f3d4a2614c61b3e24fc965aab92c8da3b269efc4b50f1c4a35a8800b224c3a21b0b038613f175d1f706937877955888b80329e4f75b353f42efa53ec2a9a668ef000dde1f5cfc8f3be9560a304b564c42f412e93a7a15750022dd1f206b19b5eb374d9f57b43d75fe5c92bf44da49d9a5efec61d7cd2508aaf8d35919ec9a475123e32593fbf873738c8520ac6fb14ce43238c15841eb29047c25a431deb7261228deacf564f6bd2498979c95bd3a94cc6d3cca805b4d87c073bbcdad58c0199e0868f5ee731495d398a0c7894f4c0d1d14b74e43d28ecbf6e94e8d4bcc248e5d5602160d5bb8fe4ca50b4954e15c0d790d28217f385362bf1f60f0253b308c6fd413c8e35bf713b43c8f603d0711954f24f0a2c65b2d691e3e531a8d5e626b51951ce432c3686f3ed47f66dacb92371fd64ef2f1a23dbc049382c851bd5a4ea34bf88d4c72f3d94ff214d7a8b741262077f6edc39fd08f336c323a09ea745b7e934e9f06a473e5a8cc75b6e841af757daaec8374b740c63c4fbca0db71ae3e581c766247e9081f34df4ab24d5c5f514b5a5bb56ac4b991588d9315a1717a592375acc4401992ffea62e1d25300f4b7958a032b5e3b768139ca054a8cca2b3d3996ed5067e4f4b20765f52cb849cab9fb4b7db0dc92644d21c1812a3e62653950b5b6af14819436989898e189d6777a0b8d41b069a35d2a20c9a2221c703a272b2c7f3c5b3c5a5059c1a20070684420161a15061bc2dd74193ad9fd2b9d640a0e8e997a0efd505b9b030d80dff24dd89bc4af98aa8a3075bfd41cc6abac755675b17bde7588baef4d07721eb7f3b4cf3b118441dae8e7e89980440f2391a297f61070b9cd9f9011585b7f970fb54f4cf6e8a41e99d2b671e91eee8cef97e36111b73add177c04628f0cedd56deecad4314a443111c0ccaef689c8c3adc521d7bfefc0a4b8547d0036be13ca93eeb11d47acd26277cd9d42e3e8c0509333cd0cb88ea413258ba355fd023cd767d2f1feb47ad18e10b2a61d2083b8bdc6a893ea0adf31392a5e73d30de9dc874bc4b5d0d179221bdfd7d30048920f53d0920529245b306b378bd932600846bcaff147953234f9a8ab7e6c5931184b0a440b221d1d9e17849ad62878256a57062aad960441bd972f72bac0306d0c7406cfceef47e621e279a8f4167d7cbfaa93ee5dd01379d2c96c1184d013e78da9ba5793abc552c7e7b0a16cb7b35e54c6eaa1e7b1124d6a6b948466585145b7be69c268c8e294c1afd4aa05b3fc09a75cf79e2cd93712c9c20d3c39c3bf4006008f630d89c8806e4c5efeea9d4f01c49d1a5a16f94666214e893545b26592cca3d8b4de1e722b3e16904e61030acedd4d542a47935ca60ab55ba29902b72e116f72a125bc25f7d60bcd169e9d369aeae8e931735090bec109b5a14d88209967e9f7f8053dbf37a52ca057a3d68dceb804a43b9c3ca85e31a59c98238fef1a1c879c76321a8201ff19a00b521eff2e6e14575672167a491128beb8a97b6a943f0c9da6f50388a66d5ab71c2a33be6a04fac3ef8fa7bd8577ef3a256de00dab51a2ea96712c33075269efd619f46cc5369731358fee8724d1335c4e1170bb75bf4705b9eb66d49da8203973b89ab8fb5e4d58cb8961d54e695b1bd2f341a80d2e67d10e261175d1840d3424d4e5f49862ca2d465ee61a699a73fd3e04e111e8a6b06b5ad27a6c6f9d1e30b0989bd3d956b0a3707d560a030f9d71c14d4b35ae2d3fe2b4ba8de9f327d3e63ce06c4cf693c2f580a190ec2ca865e5853c2f5a3342d78f64e6b3db5694075a70aeeb10253084201288e807ac90c744da4bcbfc69671ee9e8953c79a7a3befbee8b25ac3a6efdc140f4fe81ecf49936686b2e804c8aa3a6ed518ee19a08d31b5feccbafe2b96211714cb759aa3602cce4ac2508a40aa8063e0c21377dd8498e6012ccfd3943a528ca9118982a8b999dffc2078813aa67d76588a20aaef07066828c1e343d49cc0c9685a11e5b29de7fbb8f2b07760a067442204719306d8e09365e347975535139bcf27bd8855d1067d9c77cf2543fbc2d9734dee573c00defb100982f7e7b769652c77387cdd4db26a9670a22b0da85862e1442f876cbbcc5dc79a58091b0926fa93df0fdd8937b95330f453b83f52c43e25f20260221b5f3bbed163e74bd96be0b701487fc6d7a06f6f2774893fd05ddad526dda5bc5208fce127c7df9190412b7b864e939894c1bf8cc426ace767c8bdcabcc94ce8fac00c1889916ffef052db7f4a962c966218128dec51efed4baf7bed40211dfaceaf8864dbac8c9af813509f81da4d2c08e16a985b5081c2bf047bae17d9279c2df656a49acbfb06d1e1af949945d1b196b724afd1c073c9a216bf59342cda9ee469a72bd95dc0ce066fa2ef742281b3fa25b627ad30e7f1748b8d5288a31aa6317bd9a8a6924d0a006f1cb43143034181a40a6d7c6d6620336e6619cdc2c9760fdf261754ab770cbbf2e230019e8b56b8358515981e133a63d01caffc21050c7e791aaa530daa2157b995143ba58a892f75d252b80f796c29d911c82b7d5bdda120d6a6b7637ff006795a36db50287143bd0b17869d04244401f61eda1329dfdd96b48526ba93eed700f3583fbdc82e819c6f6554084d04298aea61bae8db30d1fd359827bfec1e61e628073f2032a529f584f6140996f0005528a850f8866517a1e2567c6667ca48d96ae6d269dc8c91f0bbc6b36985bc8f9d13fc9af774410f64f4fe13309aa763d3db6faa277e079c77810d9ad336c588c05477046cb62c34f2551d35672cd6d12d928aa99952ac3704d6e35d52a73b7f98be5e477c67c0703d38ee4f7033a1cf27fc663af8d047a436a0946c2ce19cba7ecc9307f0a452eca3fe1b51a921631ff0f9584551c7630f7b28052ad7bb3b1b83a9efcd6e80f4ba4c72411dcbca0b1a2be228d67be2d58d9603d7f7a7bbc6902407106169d7838253c5897f2b0a8c0d4d5e40ef0cdf71640e4395b6dbdd99e6016917b9a568e498c92d98248c83497e606dd9fb453ad4fee606d091bbdf44e4cada4e6b12e36c78b8a9f3aef3e75c8ccb6daa555f61080a29845a204e523d3512fa492e547208d82471b39306ec7a129de0fb0328a2a9c10518bcbb6342bacc74bc1f08cd592216ecc9fdb275e1d509ed3fcdfb2c6f4ac6eef60a6839fd83d5664a931a9b083b2a0575731c9ae7bb9036138eb80eb1c217ef66fd51ba3f2b2c6849992038e8c2d937615e1079e91871e855c320235fa28d186179a07ecf26c0a717e5525828e9fcc6e8817e65a26de25b0d52d5c2b91a2da60ee20c18455e8627674740e7a04faf4618072ab16251b394fc06792bf04b5b93f562eb03908c8cb3bf019505f425eb54bc08a2e309f06162b69b4151893f02ddd48b16f7cf1311d174c2b00df8796574a462b24e0bd6d9c83a7b5a14f5a7000823f455b357b5ec6a95712058bf82c8c433c23dd77c2e6238d651f0d56dbf1fbcce3e95b3271372d0c95e6cd8d4d444600b690ae5a42db28c449f96420b0a2f0764639de48acca2d964910f60dd38f156f7ecc588249348cbb394dba03065204b6415de39515523a29f0c349718d3c57d985a5a2e17778fc0c9e2249e99df4b7fcc990a37a38fd024001fbeda7b6da0f0e67ee5e2311623e6d4f17d31f308ecf928cc40040be94ab1cee0fdcef83997f14d3850aca0d48c10101735456765c8da2d06ba86bd57cd4bb37ac3e70192a14fe292b10c9c396ff3ea604cd11102faf75fea36fdd9a639931437109c44eb7f74e02110b3bd85310f487af2b5d341599c283a78aae908b18956fe13362749d6d1149d4a12bfaf6d5ed199a40bead02c01e03890023fda34f3b134d082d908bee06d75929cb02b8c4e947c523a4df5e5da87274d298abb68e7f841d9b739d8f965a0329ebfeabe02fd4244f2b5582aa4e0d3af8bd571a5c71d674bee1646b1de31f559543797559b47bb1be61d0e8b641e515c1465c053eda1bedcafa4f06cb4e3121bd0148e5dbf4c5432a4aff5c2a98236f81667da09f797a2ff52c42240da463be0b3748967cc03198398e2203df5b4d29ed6a46837601c8be732cd0268fa6424eb083e20ce2dbce725296e989242234be58cf1882726dc600553db4ee856fafd305b4983bb1042ecc12abe55d70bc20d8efcb7da490902e4bae63dc2c2ef69bf4fb7b5e935319ac4cf4a26fd37b7a2c903d6151b60891d0821ed01d1f1ad052df279577aec03b633503de951ed6515f5acd3db49e04c69864578fbf6906bcaea3f6f7e15a6fef7d3d3d5ea4deb5e20552bc1d93acb1f7e5d2eafe73578accba7ea53c899f32674419b02f51d017f1534eefa9dd5be004018a8d31cc23582c7e4ba7a6a459e5302af3ffc09896a67914bc34e2274d7d9e549928e283f0d1cc8484be4ea801cd9b48ca7dd603459ed0bea8fedabcbfa8a590a61d18d96300fc2de60d38ec8e4fcf953a893037019deb6fa06fdf950dd85cb11130375e0dad6ae19e249b73d2d6a7d459028050f6fe08a94c9fb3dee511015fd93ad4ca798f38188b5009696c54f40e46c1486cf5c9819edef7f3cfa0b0a930ff44e7622ce7e200873ede20ca72e11b73464d93681b9b221bf4b7e4032f4263401aeab27ad60cb470a968b65159d0aa41a898fea6e4c27262e5fb69fb84e4071e4b8660211896b707fcaa869f8d4b95702a95726b9f23141710ea8989257768fa340ca5490936394ff53cc511de417a0d714d374beab1cbc74f713244c4ffdaef1444e106d24bfa3d9fdb22036f139ae0ba83bb911be5703590da708d8242fcab7aaed2102550a042106f920a1fb523c40e97ef3e3eb57965237b64a8e5168fecc7c72adaa801fd5135ebaf63dd2dc92e2f5305a50b06920adc843039aa4de60a14440a17d9453ce7051b98de3e9adcf2997afcfc3fb1843567c89e47eeeb1a9542dd8731f2c847add8d6f7703fff70052cb1eb5d9991d4b9476961b1643137a7e419fb6b320e22f054641d5e3d215ab6f4f1df150e4aa04d8b3c66e1343d60ef073ee01900a13d0c211170e4ead04c10adf2d056d538868606eeac343dc5546dee65531caf5d62c0c8a21bc9b5f114b5ee63a58eee7ed362c066e59caefc72b0d55de3ab4fe877eeef08b57ee8dda62e45030a0f0cbe23e52911de0954f15464028b47c88c43317c3173fcec1fa509eaef7247001f8110bee68d26f5a32f9961c4d3a6e9f89af6fa0827fe02be14f2000512a19fe3f7bfc53b4bddf3d4609155619571e821c6c699e1a66ee92e50b759843448c5a1a77956e5c38111139b045da0f2f203f4ba2fe3efad3560e83add6f8c29fc24c81ec62817e5a33f4ec4cc86dde1be09529d90f047e2639fc7027de2aaa3a1453aee773b453e4511efe8f0f882be3d541901c571b6d0619c0fd585b2a702ac68cf928d86dc7db8decdd284624ce9b94579500bd8274045ef7a149f3bf613401ad7c5add38a9a89a678cde344422cca3caeed34c5d4f1c8a18209484138698f3227319ac0d627d9b22f66af9518d6439b49210edc94069cddcf644c6c11b35cb9819f771a8466ca88088f02ead63755026464078cdb9f70d27190999b83fdf9728f92141531c93a972d5c824d4958f53305d80e39eb6b0717f5883a210a21e42abf5895223bfabc02e68ed478c310196de0d27e6fa31f2623574230d16cfc2bb670945a094cfbee374305592c8adda04a2dadae2111e04a3a2d37d58f4299ff58538c2f601f46bfadd41f08f5992cee6bcf4d498527c93c9aeff24b900bdd4f9ae4e345d0afb79c483baaabd3a5a1fdc499b22f31f323295390f0edcc633d45de6614ab2d8efccb9ea482a52de722cb1bbdc5e09445dcc998949bf9a83bb9ac68b90f4db5597d157e14bd73486b524c8c80f9b3221a552710f9cb64c451c775b0e44b867e9370e30db570435229f26618cdffcbd2cde35c3fbce45676e5ca0ef3207ed47ec803475656e4bd0e0b33197eb94f0ce4a3665c8054e46bf7a822c61b6e8e30994d3bdedce8d3bfd4a43bde15fa5cf48a8f8cb23381e68806b38f7697323030cf7a98a09e8db83b2fadd8c11397fb64f4932cde6bcbae3aaf922c23beaab917b622a1b73bbeeb603ba010512357ccf3a2fef35ffb455578bb27dc5aca24d1ca5f4e6a9488a76cabd2d8d030a8f8dc86bbe6490ee8d688d8ff33ea82a84a1a143d87b1e924066e5b31b2ab6826343cc61ddd06e0580c9bccff8235128c97833a39068967bf308e25665ea81a7bb6ff0486fc1f0ec1d0c30b87e4a7510df6e1e3870a3e5f2871ecbb63c159877d69f208f2968e7669529ad32c0b094372893dced805041b680fb7eb72214b606d5e6f0c94f6e6bfed3d172fbecbe2e50f3735b72a1c5fde7539812e9a77e9207f5c45e1c33d034090d5acb1f9cd5623e7860049a8085c4f0bccbb593dfd8d0ae8a07e7328df13db94e0165b9b13666971a7ad135f64ed77b4f3cf4eceb3a76f67dec408786cf3706990b0d4e7d6fccec5cb12af13130a11ab1192475e56777c52d0a008c8910830ef94c3accdf1b9e906bd53d04024e3c28d58cca1b4d8ded5148ed87800aaf072d8f33cf0981e33da2c3e52270a24604bf76dc4e242883c8ec74b1fc8216652d430c3c5caef15eee57653803fe39f8015e3bd4acf3ff7bb8d3007d8247523816ef45451b9facf71e853e35fe48d3211d3d50fcbbd431ccc24e2f4210433d35f034d50cc71bfc594b65a1e493b49c9e997940a7ca1bb71e3be0e4cd94e9b0ff213c5e518872a6b55c65a6868f7173cec13617921a21f7791a3b1eedd0c984723dff896eb25feecfbfdaf6952f01b7363f357c6e4f05be666859edee26e848f8c4660ee730bbae1f4b6de37fa5f775680cbc3f3b4d99e7f888f43f72c4b06bfbbbb6987a41fc37ffc8df48ec9a50e6775d66b10a9f5582ca0f4f3e48818280dc5aba440f4f8185d76214bd288d57d877635255f0cfea489250d61f4a0950284e566f5216ded85a6737eff4ca5511d38a94e9ff0bd40180c58e82012389539385697ff0b4f636c3e5e2fe210ff41d14e295b797df4e849f4e15e808e9e850531d88503968e9220054b684b22bf9e8200d16438de39380fe2c9ca4951ff8b261d8b30aaf44aaa3c6b8abff6ebb99ed324508311031f66657475ef3e3d67c4c61087117f3a2336ee849d5a5e4576e2b43c03ae499687f66bb45799589411650c3f224a8dceae65b689932ca32f46b26482e2b94024294bacf28cfbd608277655b922aefcb3bc6f53ce14591d90239e3178183b9fce390e32fedfeebe6a698146998fba5a8e0c4bf5f62885f662f3744dc31dd041db4fb6885f75b0f9617b561b381c59daf2184918c1bb596bfb58a5b46ee7f05be1e87a446f23dc106f4bdee1d488ed0f9d851a14bef3f3c15ba8b3eb30cb15f8b7cea4013e4381525949e7d6ba719676ae696cf4e10fcfe9b31e511c6831c2290b2cb8addacd0833b562ca9c5732058cd6cffde16ab504df0760567010a16156578bbf1b5412d16e6e6a2b49110b9949bcccdaa746f934b5256f774b7426c40085fad7b2f55894f3dff92182c8f8ffdeb15b48bf10fe67c57d94fda53dfcf9f0a1b82fd6a23d24d6ff84a9db9d6ae9009c9b11cd9020c442eacb59e1e15d5fdf7055eba4c546eb5c3873887066cc7e8a03529497256b59847fd10726b2495aa1702d3a5a61c00956df66d0072db7786ed634c37afd9cce1c1243f182e6f4da4d1a39ae81b5a824300c5a12cba9aec6581238406554b31b5ecb7b1021685ba2bbeaabaa65ee322a23fd53481cd643a06ee5edd7ad3f22f4ff6e6b6caf4e65d1e2e69964137af6364e331e11083d52ee90e957a7fd130229e543bcc65257360389b99ec86360a6d0ba80570e8e5963f04f7684b083ca4d872037f8fa2c14ef809f0544b0f0e5118da0b5e5194f07439a26d9b008a0a2308b6fe90d2ef25cb98c0280660bb4d2cf9c72742e7d9191bd87917d4a631324bd8dae5aa88515fca627387a8f23ca206d315470dc606100c2122047ad27024bce20f85360253482a28e0494af01ac52376b9606cd9f238ca61275f24fe35b6ef372f05bafbcd900e8f2ba940dfe52c52a2af26525b890648e569c6048780a9a8961309ca52fe83bc4294527a9e845a27f274dd772f17e4f009538c38c4bb8b20c466f5c039c13c496e1addd87e8ad99805c62a7602d0f2bb6c345254e6fdb166239d6b47ae44b3e8bd8c9ddb3af4a39266f5703d698be38d88885e064b9ff267b5db6cc4983089c5323819172cf4e3b93fc6304ebd6e2b6840712d89ccca59bc27ba44384589deeabd592433b8088f1ee7dbc3972fd3da546bb75edb07763d107ab5d72542aebac729603391e775a1d55dc6fede6928499bdbe6510d83eec351e341a1fec7af3a8ab46fe5b4bd4f9db79d8edb5600af5b4e6c8414dfd7791cf1dea839bddfa3cff85301bf07f13983f0a957d951b5e790871467a7f00c3d8e97c925f4ac41180bc827f088e96a0c5c985708b1a067f06df48ebf2c48a51f17c40351765413abf58fac0462ccf08828700a6b4068e0a7cef1f62408068251db7fe35f191385fa9c6c509cde3237ffed4e5868ad819549abd50a6e478014b4895102fa584eb8c1e50176f383e961eba7605e440545add0d8a2d8f5bd11be93f50846254ced4c661bda0500ec4720c5b5c943b9735cd58ef97f98ce4aa42a0447bb52ddd09ca5a5a6316af1e1579b8785fe2f875f82b35901737cabc86f0612ff876cde74fffea432b5d4dc98196346f669ae0bcfbac9d444a71ae5c13e6e5e6e58ff115885f4bb74f181efd3fec19c6474ee089458b6a890828736dee6492d830f16b38033877d6e07c27dc0890162ec61ac4c2258ae2975a11036783c81ef73cce27eb898d0e13499486fa4c8835147fcf79af7d79e495eff7fea48221beba9a32d77f45520e13aca93abdb9c66fa832efed0b7a14e6656cb92b134b23df013f4064b3a8aa97cadc84109f9a35b0db78b153ba5964fd638526278d32bf2464ffffd5ee35c47a4ed12fe662396087dcc68715d7891742b4452e7eedd18b394dd0b6a7d8aae4bbdcae2e64e9f51020df155d308a7c294219d6730954b4d3989a3a7cd77413f9987618f23db6e8d8599d4738613e6b6129fc525e4204d3aa2666cc9ee0da63ab2110082149c00be5d15f750914dd11df570349dfe3e587d8a7480a975b83f64723b9a633b51dbb2d4845de20a2df10aa088279add951a7a4533de3b0d3571e7d404512623c47260d2e8e644b767d47db550a30c6e87cf27926a4c66a17fd4b68286843b0148baaf1ecb926e9dd13abe44c6f280fd5f42961be359fdd11c0f46cb341c7530f1de45498d243331ef335aab0e83eee12a062044b0c7aaf8c9811c78ef14a490f2b30b95c3199484981e6273b95fd65cae71b638e88c07b510fe8864514167bb3b7c1e8163260376dfd3dfcdf7bb89fa84f53863bc1cb3dfe5e6b6763921dca810325f3701de5144d964df98819a48481d99d2451ab0af50e57bb46b4e96c39d348ad3bd31929b4aab8d6c53e15c74fb8ed55b7a6152ce6ea132e3f32e8d9d1ea67ffb10b178d82d7fd86e1b98085542e1df99e17ddedfae139efb2665ec1a13b89b7714ff73649a2cecb28ae097433ece3690cca1a4a8d1d4c86c998eda420d127404a73f2143aac8f6f889a47abe956b3e4243e46aff429d716537c72807c0c76888d45264b6a4593b742068af219892a1a43cc45fa3b9f999595cddd08b0208e
     1c31bf1e6e2b2933092c3304c7734c12ed6cbe4ae0581be23b4ca97c52a7d76e11826407fd2896fe8dcc2894e8abb3fedc9a50ae67d52a0683f1a94eb2194d7507ecdc901a81b9e211937928f71fab0d05e01c0c420f38ec9eed8ec596858e1a75ac3a1471d67a276d965a39ca3a033810309359eabf3c1aa2643ce1f877bed59c1a076f2dcd9846d30ba2f1366e37c01280160939520632bd13936911fc82a70f981369ffe440005a999856cb93adde0d0f76533d262087745ddad43e895d87867a0e03fb670047ee52163412c60916b218bc1265535462c58bd2a3af82bdf21038a82384a211c43997a1908122e9afa1876c9431d0088837d4c3942863bf0dbdae5656f682d2fc49351a966eb70335aef43fae32a9292f10628f2abfe754c9455041dda46a8d84c67ea80788cfd990262b5370d9f09090e11ff9eb48f58ce5e4cb9097c246202aeba07df619ca114c1f8ab0166ee993e3d5e152dc7b9ad60ff72c9aa904f34c72d7ae8a37cba042863cc15fcd9fd12e4e89dc96ecdb95cc96d60fbdbb5a0efe363adaabf0568f266024116acdfebd1da96f43164dd53e393e311c7dcb09d4d9d644ed944f8d419aec720e02afbacafd165631cac54edce668db9bb6c18fe3cbb282094ea1980dfc94a9f48202067e9aa218fb43dc128e4a9b6be67f918433b01cf8a027a056f423e24a1edabf45e859aedb6445bd2df72711b1756062284fd53b16a98eb639ca54c511890ba45bde40d12ec928dc02f63283d32cb4cadc12a0f4c16dd0b472185f4818cb8a4809bcd8dda4d45f46e55eb45df3687694c33a9fc5db05ed987441f82db5b7115a8ca4445d2342dcef511e8ed02da7c933cce4bed7c933b07bc3b5c997b68c2cf2832a136dabfb202be443c9a9a27d758778db5bca1d6a7a8d8ec5768fb19bee8649889e1c25b5ac94ef9030d829c6015f31dce36ce4fd61ff3fdefb20e4b2c20b37aceeeecfe66b0559807558d0aef1f8b58874d66a480c819cc84a37396e373c697d02abee52dfd630ac4e9e6c7750669be112da2788ec1e4bb1d3ba1072e7b60ae979f2b9b94be56d5f36dd9ed7b87754868b6526270aeb29b6c0e5e7706b94bc7eabea6c2b654bb296146ff9b1dbebe76dfb0298be8fb64b3037537de17132f56eef405fb00e2defffbe84f28c5381bfeac6c50d17099ca4f7c0d7a41c980082d05745cdc8018281261060a4f369126bce480ea5b263585fe2be4f127d1feb751ed88cf07a4d5484ccbf84d67c9040fe2cc29ff38ea97fc5ee43f2d04cfb36ddc4329ad60533687fdfe30f10a10ae7ffe10a97cf9312c7489b7cb91b5a12e334595200d331079ee3f85dfcd9482f6c276deda145fc11404baa8e29658b68d454322b499261fa986c3456ed08af84614e612e019510fb5eb9511beee77d9114c6d8f923c3d488d3c3110d7b8600f38b457d4508f7a5da5fabd0a304ffdc48da9ba1375faae3e0d3099333572defaadd542bc7f11f0f3b543cc2f16dd04141f2fae54d8724dc3f49d6544b4be166f857b7a6bd72353509332b7ac4a35e781260a17aaa5a126a28eaacc853df80ab3d4cc42ef901ea0fbb87f870105e4d57aeb0d7cf880eef6c9e7e4688e948b0c5a7d8e51726ca8f28285ffafbb7bbeb7306c376bb27bcb2cab5d04ef81152324d6aed9a7c86f584fee32f38e61f38c7f7204962ac684014f2c0e48deedaedbf1a89cb040ed58fc89a7775a94f3bfa2c0e051deaf33f8d364529d4bfade83bbd18e5f9b6fa39490ca256db0a4f239881d2db068ec4b0725247f69480667d6b9c914063d931d2e0968945eea823c3897e5b1d740f3032945a20a414446dac626f925b882bbf78f2f85280af145b50ffbb1d697285d4a45916a45adbdff471723a3834120f54796795839f6aa7aba16e402260ba859f55483d7da37f0635e4432cd85dfb21fdecb8fae48bd2cd7e7f30b40ee9464d5fb1df25b5100a462e68b622a7921563c1efaebaf317923c3fdb3168427cdacc9e019fb3513c75578cfc00d0fd18736458c548e7732cc3fbc3168c168359356878762396de5ef3af2f17456af511b619d60fa48f24fdc6602f049e5b53b0e914ebb58b73331edb5c859cdfc4ecd60be58d7106317a58340cccddc5f66ff32443ec753fb466255eae8f42aefe796126251880d47edc496df1e18976d0bce5fe5bbe8dc0c40f460eb47b478f5d1c81897192ac8f635e7c6adb56924b8909cf00398f7f6c9cab55ac53098de4c859be748fc831e77054606ed556032af619fd57aed3ba536b45bc58a76fb4ac6912398219f22dce33d64e14186dda2df4c21262028f1cb6070cadbaa3299f8f3ee7753db746721cee1d2432ee7da3538ed9fddfb5c17215a7b81eb0f60f6eba677b91a746417692ebf111507de5d5075114320f0c028d7fbde30e24ed12544168895b9e67d0252dff804a8973a9b63e85d07ea54ae52e631dad1d99a53ce43191fa4e8e6a03298a48006c4d71ab16f3abbcc67af6d29378db2d3703ae9ad2444cbff83cd9925fd30de6939a9b596c0b21b47c96eb5c6b7512a7b633c795e77af989bfbf11985dfc540bc04a398801b15cd46e5c86e70722aefbc902a3d3ccfa52ec1d60c2954075c7a7f3f57e711fea4d5c7f020602517dab4baf82bb1b5c231cd62ff2f43099539ddfbb7daa5ca65364d2212edc699c0db8c0f26fd42100adfaa76eed10d8eff5fe804307152626c350719084664e8b48a5c78bcdd62ff5ba2b6878629936b4405626e6807b58d822f0f629b0a5bb2184a6c9ddf7d5d45f5f38531b51c346cbf66649cf05761dc5cacb653bf26e5434db0760b1b0fa205f90bcb6800815bc2da22a9a85c20d1c0b683dd0b5712e9e561d8999a3226d0ab2549d9b02bc4edbf94c50e4cd41d04f6e52ed9a09386548e560141b5e5990e55135c4ac1ce859acb0cf883a1f873aee8074df266f2c02fa2e534711533451124cb75bf6399ad6d57b03489c1a9c5757eb9320610570b6fed4e889ee380adaa5b8b628814e183247356f81b2ca812f925d1f2030223fb0534b564ebb005bb14510ff28e2d9b5e259c9267cd1d304ea86a48b99558d3fa103e0ae6bd579e93b57705276dd4777e5e7c564da13dde6f1c7de7d0a18fecc6c659e4c58bf996982829674b628708d760889a72425e756a3d22f98f243325b518364cea358b14124dca9d3614469f92e73fdb067dfba551449ac26dd682635d02eddd2bb1448e995b8966f66f119c40270f8a1972ded76395cac9795def19c4b28d9029e8c39d03ca3b2dc37861b5f58a4fb82321dfe424b3839db8b66d7b80075624cf400888731c60eb1b173bac99ffb8390f903625a6cdd41e0ea91a79363edc822c2752d5ca48b396a2590edd5239788760ebcdac81a1ccd21e6d27d440fb4bd8228aa817389ee397f7a6cd6139ec0aa94857a1c0b6c2036fe53cda46ca687537263d1478ca80441a1548479be4c55c4974b0925ab88034d9f6308d4cf21f1c62d600c49c69cf4a4e878d6dd52efe6f0e58ccf093affbc85c67fa55d3d679f03b4d4a108481d576d88e3a0bdf6b72400fc73fd5475fe7abc80fa888407a2fde575bdd7c9b08e99f777d6e7e8fd2c09107cf37d49e5c6fa562607eadd5837cd40e8ac755100ed308c4273e71b9e70e4bcc7fed7d46fe898dee537e177620af9afb6792757846a536d790b17adfe719a642d74dbaa34ff8ad66dd82ad3d9667151254b0cb788d1c421e4937f5751af9fbf4b89804a0792003fea7c3cba075748065d212ee364d6f1a5829088166eb79016728c972f025c67396841dd7626634d2be46a931241dc47d9c96d7084a2725de476f3d4a2614c61b3e24fc965aab92c8da3b269efc4b50f1c4a35a8800b224c3a21b0b038613f175d1f706937877955888b80329e4f75b353f42efa53ec2a9a668ef000dde1f5cfc8f3be9560a304b564c42f412e93a7a15750022dd1f206b19b5eb374d9f57b43d75fe5c92bf44da49d9a5efec61d7cd2508aaf8d35919ec9a475123e32593fbf873738c8520ac6fb14ce43238c15841eb29047c25a431deb7261228deacf564f6bd2498979c95bd3a94cc6d3cca805b4d87c073bbcdad58c0199e0868f5ee731495d398a0c7894f4c0d1d14b74e43d28ecbf6e94e8d4bcc248e5d5602160d5bb8fe4ca50b4954e15c0d790d28217f385362bf1f60f0253b308c6fd413c8e35bf713b43c8f603d0711954f24f0a2c65b2d691e3e531a8d5e626b51951ce432c3686f3ed47f66dacb92371fd64ef2f1a23dbc049382c851bd5a4ea34bf88d4c72f3d94ff214d7a8b741262077f6edc39fd08f336c323a09ea745b7e934e9f06a473e5a8cc75b6e841af757daaec8374b740c63c4fbca0db71ae3e581c766247e9081f34df4ab24d5c5f514b5a5bb56ac4b991588d9315a1717a592375acc4401992ffea62e1d25300f4b7958a032b5e3b768139ca054a8cca2b3d3996ed5067e4f4b20765f52cb849cab9fb4b7db0dc92644d21c1812a3e62653950b5b6af14819436989898e189d6777a0b8d41b069a35d2a20c9a2221c703a272b2c7f3c5b3c5a5059c1a20070684420161a15061bc2dd74193ad9fd2b9d640a0e8e997a0efd505b9b030d80dff24dd89bc4af98aa8a3075bfd41cc6abac755675b17bde7588baef4d07721eb7f3b4cf3b118441dae8e7e89980440f2391a297f61070b9cd9f9011585b7f970fb54f4cf6e8a41e99d2b671e91eee8cef97e36111b73add177c04628f0cedd56deecad4314a443111c0ccaef689c8c3adc521d7bfefc0a4b8547d0036be13ca93eeb11d47acd26277cd9d42e3e8c0509333cd0cb88ea413258ba355fd023cd767d2f1feb47ad18e10b2a61d2083b8bdc6a893ea0adf31392a5e73d30de9dc874bc4b5d0d179221bdfd7d30048920f53d0920529245b306b378bd932600846bcaff147953234f9a8ab7e6c5931184b0a440b221d1d9e17849ad62878256a57062aad960441bd972f72bac0306d0c7406cfceef47e621e279a8f4167d7cbfaa93ee5dd01379d2c96c1184d013e78da9ba5793abc552c7e7b0a16cb7b35e54c6eaa1e7b1124d6a6b948466585145b7be69c268c8e294c1afd4aa05b3fc09a75cf79e2cd93712c9c20d3c39c3bf4006008f630d89c8806e4c5efeea9d4f01c49d1a5a16f94666214e893545b26592cca3d8b4de1e722b3e16904e61030acedd4d542a47935ca60ab55ba29902b72e116f72a125bc25f7d60bcd169e9d369aeae8e931735090bec109b5a14d88209967e9f7f8053dbf37a52ca057a3d68dceb804a43b9c3ca85e31a59c98238fef1a1c879c76321a8201ff19a00b521eff2e6e14575672167a491128beb8a97b6a943f0c9da6f50388a66d5ab71c2a33be6a04fac3ef8fa7bd8577ef3a256de00dab51a2ea96712c33075269efd619f46cc5369731358fee8724d1335c4e1170bb75bf4705b9eb66d49da8203973b89ab8fb5e4d58cb8961d54e695b1bd2f341a80d2e67d10e261175d1840d3424d4e5f49862ca2d465ee61a699a73fd3e04e111e8a6b06b5ad27a6c6f9d1e30b0989bd3d956b0a3707d560a030f9d71c14d4b35ae2d3fe2b4ba8de9f327d3e63ce06c4cf693c2f580a190ec2ca865e5853c2f5a3342d78f64e6b3db5694075a70aeeb10253084201288e807ac90c744da4bcbfc69671ee9e8953c79a7a3befbee8b25ac3a6efdc140f4fe81ecf49936686b2e804c8aa3a6ed518ee19a08d31b5feccbafe2b96211714cb759aa3602cce4ac2508a40aa8063e0c21377dd8498e6012ccfd3943a528ca9118982a8b999dffc2078813aa67d76588a20aaef07066828c1e343d49cc0c9685a11e5b29de7fbb8f2b07760a067442204719306d8e09365e347975535139bcf27bd8855d1067d9c77cf2543fbc2d9734dee573c00defb100982f7e7b769652c77387cdd4db26a9670a22b0da85862e1442f876cbbcc5dc79a58091b0926fa93df0fdd8937b95330f453b83f52c43e25f20260221b5f3bbed163e74bd96be0b701487fc6d7a06f6f2774893fd05ddad526dda5bc5208fce127c7df9190412b7b864e939894c1bf8cc426ace767c8bdcabcc94ce8fac00c1889916ffef052db7f4a962c966218128dec51efed4baf7bed40211dfaceaf8864dbac8c9af813509f81da4d2c08e16a985b5081c2bf047bae17d9279c2df656a49acbfb06d1e1af949945d1b196b724afd1c073c9a216bf59342cda9ee469a72bd95dc0ce066fa2ef742281b3fa25b627ad30e7f1748b8d5288a31aa6317bd9a8a6924d0a006f1cb43143034181a40a6d7c6d6620336e6619cdc2c9760fdf261754ab770cbbf2e230019e8b56b8358515981e133a63d01caffc21050c7e791aaa530daa2157b995143ba58a892f75d252b80f796c29d911c82b7d5bdda120d6a6b7637ff006795a36db50287143bd0b17869d04244401f61eda1329dfdd96b48526ba93eed700f3583fbdc82e819c6f6554084d04298aea61bae8db30d1fd359827bfec1e61e628073f2032a529f584f6140996f0005528a850f8866517a1e2567c6667ca48d96ae6d269dc8c91f0bbc6b36985bc8f9d13fc9af774410f64f4fe13309aa763d3db6faa277e079c77810d9ad336c588c05477046cb62c34f2551d35672cd6d12d928aa99952ac3704d6e35d52a73b7f98be5e477c67c0703d38ee4f7033a1cf27fc663af8d047a436a0946c2ce19cba7ecc9307f0a452eca3fe1b51a921631ff0f9584551c7630f7b28052ad7bb3b1b83a9efcd6e80f4ba4c72411dcbca0b1a2be228d67be2d58d9603d7f7a7bbcccf28b9a9996f5f6c91a5d9c17892af9949b572af9c647670da94bfab5774987f4f22efca66c4d4e1d0571ac62364304bfb820c76784c52f07dc7e0f6494f336f3c57750295263cf2f2fb01e7266bab5f327847026558450e89b7645e58a243ae930cab42276fc1219d2273fc42d06eb6e662b475d7759a41479d31bc0511ed1004a594b931b9ab96c89fdea45d04baf66fa267c573bc7158d8215662f4a0d2391483053270686466d357b385df419dbb23d0541c99971f74e1bd0cebf2219a769fa3ff601f7a6e38f957bcafe15b567c37fecdc9806f3910ba325da98ada1ea74f2802fb33465649868524f806adf1c51082a89393d011286046025eb3d8967fb4c8e1fd8839baef080af4d59311fd58d6cad288a5949b62e6b0ee56c79b3c690bd4c39034f706a65e0cdd6d44fbcd845e11370524979072e4a608cb77110e87c3f4d97dcaf57621266ace513c628844f46282638b3b6d3b02008229241c3c03bf7c3466b469088fa78de5df0cc7d68e365338b991f05306cfa485086083f2303f39ed37edddf6c39d9e0cb6a7ec958f11a9d1bdff7d68fcd5a6cab9ca690906a3b36af8e9b8f0d0e8e43968e2d69954a4c0ba1a3544d7b4c025596c2736cac0a39e7a008e32baef3543e25c102c97e64222d17ed7961d974ac2bb155fd938689a80ff11029f7bde7d6532fc4944ed182ed704599b6efa64aa361cea0fa4fe37c3d4a6c2bf1afadb8f9a465abdf4aba240353981baef628bec52d6bdabf4666d34f9a396adefbcf7a43812a89f6e748dfaba19a0e44ed475241993786be9ff9f7de5e2386ca585187ead3b2031919edf6a557ab75b4139f00452a710aa8df334ddb261ef51d4ae03b8440126006f4972fd7136410a666dac51d59a4568f5adddfeda3461b7eb86c8a6c135e3d94947f5754c2fca5bb00f397272fdc32ca88f7420836781287366abcea7462567c9cca91ede69d00a87ce3b3489346e2f35fc4f095d93feee1d6871f9b8ee4752e0fce0f202058c02f29b56998808fd3c272a2845e276f0c27c054e59068668fefcbfa2a731ed147f63b1f134c358fc4a44605dfdbef32f8187e9963dfdd4d3b7306b05064a4dd17841f76c47858fd42af4cfe8729b6dc5561e3912f2018b06d3e678640521ec45bad84aa975a28256179b12d1355265086f7b7f393b3a5e2517fcdbb3c1bd5f3297ab3ac032e35d9642e85f540a2a7e604d5fac150870a74b739e32372d752ee1f778e20f704ca75082ee7ba12e8e65474a618c67b5fd0521fad35cb0fc218d30dda3d064558b9b4f9f2755591cb9ae18ec406713620543f76c7ca86928fb39909ec92c068ea313989ad3fe945fbeb353d790d500757027de13983f59cea23cec2a282b1289a6abb00227dc1c9f6d5cf17174843df70b8bb73897b9bab919de19e98cc4a408c4e5eacee2905dd664b0211e874c4159651edcb83fc48768149c6c96435c191c875190e302fc7c73cddc6948d5cb0371f4383dc5d3e1e4ea9846eae4aea2305d90e1705c33b03581c6309d2f68b14303a72e1087bccbff94f8af36ebe6fe652c6ddce31adbd6440e9bdbd68b590b894255b75339811eba4b8b4a3451e2ba7743afd9056240cd33d2d808386ddb718d08a5540a48b1ee4a3732a0a12fdc00bc89490942762f35e9f7b63b71c6e96d9a6f6dda725e90dd40863df58bd005b01ea63716c4098982b4b6943262dc21925f94433ad10d721aec58488a16ea9a4be275bc5ad57ab2bf7ea2f10d21be396074c8b8632003895ec8d49529bd603e238809ddbb5ebf1d7bfc40fdf678fd199c740cc7e90e9440204cd694e165d5e3c8d7aa3c777283a5cf615e5e246ff8db3c10282174bf70ff90066493d12a4cf52c538623aaee7d4bd762e47b1d8a8557d0af25d5f98d53b2b103d0795753ab05f005d61856f3bf4ad2873dc6e0e94bbb6e7cd47e87c7c3137128c110c7e347ed4945dca64718df8b115d885309781fd50cf331aa627f579fc9c69089bdac6109f12f3a2174b63914c2d389e09046b7497d1d624f854d14f67048cc534d2a48b8f7ff3754742d35892ea9f6d9dd40d8b02c4a957bff22e93b8831d5ed357ad6328cbbf16f4f1cb9b0dacb91b8335b3fafc6b8c0b8e346d7e4b509e998ec855393340769aea570f07de41b8d83af4ce38f92bac58d117eb9912bbee2f7c2ba4f2349c31448f7e6da39b38ddc963077a807e6c42690e30acbfe72a16b05f0d039923e575630b2c4820cb55e244e9c2d8dd7c8e5abf81da13c4b9527059e75cd769d4081ece9f7f3669ebf38fbfee36e6038e1ad067365b9d8a149527331130ed9455dd5aaddf964d800bf58a31b7fc6924bdc498f30a548230ddff0683fe0c3a36fc2a3a2d9f8edc8037d13213a448ecbb1200fbd19e6785546e4fe99f15a072eab98d8c7501d89d374c909f94b8fe011c6a2f3f9e236676a376ed025eae82c5429e706ac36f215a98c72748dd81f6721c980f22ad7c27407c1a489446f2a993ba9133bfeb65bde65fd4cacf3bd927d00ada32a8af8a617c1dbb10e7aeb374876dcd3fa803f85fea08b527e72ef8cc18df07249d7044b36b06bd983271982b6736c9981d62853909f98bd59e8c7dd144cf8089c984e5e6a6944e6abf345f51869a32900468427069d690634983dffa72057bdcba158783f5814f7a9c299389234c193c2c2d85738c3a455c37e2e3bbebf147793fabb07326c0163f357f2f75175a02c88486887085cd89d39089f026f0250bd12136c4c17f73a9faaa1ab88e7c9e96e1e8e4a7e1a2de7c2d7194bab43f1307d877460598c3fb37c2288b51684f4a7662f82f72a1f69428ac3cd63d46280b6131a8f8240dcb5d31f29ae29c7c6d0fc6d2acaab04a18c66aeb751578acc849e8ce6031d76d365d434276f7c291bcc15810330ebe2b048c30ad6c55e2ea5c9fd7fd7e2848ba8b91e89c26baf594719ceb187360634d382a78197143d954091fbf3e7331fb8626439c2a8c252224f0203b6f827dd6db4cf8dc711a9f2f4b5a9ad09ad4e93c3ce228a634af192fe3eb68c0e4bc07b04a23bb7c09fbf3e8c57b51d95fa292dc98da2dc939e11cd1a8cfccdec9890369592e99e456381796818f48bf6fc6e4142dcb682b6b7d5c54b5a381c640ac9f66c737c55b9c267e2096c81846f7615295a4f6919039b177aeda6609e33170f05553512125c6122e1fd01dd132f83abd9eef7e4d2b7cbff8b9594a4b4097c6792e9f733ebe9335f723e2d9b28a265becdf764105b9ebaeff985abf008e7277bb2ac0143d09c9fa0e1dd85897d801f18c9d9c77dd22d61f81b6ff5a6ad3a534c8102516c99794f2e0af3d5ea682a72892124ce7bc3eeb5135fdf6d79fd1cad62f5cac81dadb9f163c8f0d9fb75d1e45ae7308e8762f4a6db4dc0d3cf75ede8a10ec1709bed5bff7bb557f7398be2686781d4d486fc0eb2127191d7ee0ac1352c4bdf0da3a43da880df8f88d13f92625d846b0f8d56c2240d13a447b9512a0e498faeec2fb67a4173d86372a462c44e25776858b98c06a244b28299546d9ca838f574295a46049f43b71b970913027c5b5a497588c30e21ed6413b628af6e6250bc86b3d099ae9dd61f397d62f0d2039b7298554a09fc304509948e630802882e185b19829e6dbc394096c16bda325e4cfa1b176dcada132f008038cca428050b4ad5fb7729c87fcb25f61a9d51150316dfb180f344c05714133614d856a634a59decdcb0b1f7273cb5079693d9e79636a859a62f16822258f6c7550cf43e53931a77dc56ee0bd6afa905ce76221064e98be8e4b883bead9099f0b75c88990bc96aa2fe0ed32a15a2cb930cea2ec05b488a4720a75c0becea7cfeb5cf51d77dc2627f728fffe0fcb39055d208ad2adf2e1068986cebf6438364c1b59b1930383fef6a680dfe943d89a4afcc51a4e96a9315eff731b6c62d333c2bf3df32e88d14d567c78b398abfbd90bccaa486c6edb388450902d5dfce019e0728e0a1a10c6bd22d8ea212bd954f50a72a80af258b67ef82b637c8a751c91b18463475af11a4dd2c716ed060601c2279524aeb9ba768d42a753f6c7cbbe8d97f54a413b7a32f39c3189ca3eb2270134d4e6e588494f7ab600324268a7760e320131144b7f7b96b9ee608970966be41b60300b64a2b5536019f52e0744db3f20fb1c312300f04eac25ab327aefc5196970f3b6aeeb5764841cbadb814a612f3e626868cbd15635b098e2e3d8f2154a79658b625bb8bfaa70eb1fdd4273ab9dbfda42c2ef875e85fc79e09021982ff684ea3f339043284e66fc678a4e8be2a71299c84119bbc1ea8fc746f69dd575249dd8006aae744d550c10fbe8725c0beee051e79dbc87dc43de6a56530a5cf8fc5ee74d986b1a48566f26ee78a02e1db05c0439e4ae7bf7a5772412a903a62c809efbdb2d3d52992730c95a5e127abf60c80d8861e287efa0223509bbca815097a9ba40d9acc5b8bab091913f0f0c724f9a41296117860c0d20c6af2f632d0126578771d711804ee9b3011245cfa4fa0198a622bdcf4768f3a7ea5bd76675b9bebd89764f877381059046f4000cd694ec57f16320f76e533dd9ec52b3a39eda2693a24d09c70043020faff55d448066006d402f7b591021b8465f99d87fae3228665083258a5ea59eca34bfb12b25f96eb5239707a8f97900213ba5b3d7a4def1b20d33599a0b49a08302b8c9831965788524bb026f098a6ac433a443812470238a01d7e4e039e730aeb7ecc8802ea384cb5130045a28785a9704339910f4249bb378c4d4f9a5e088c3576de0283c51dcfc2b255aea289209124a35bb7dee2fdc6dd2d763fd9e80714cfecfcee2c72701df361b35d6c1d4c3183651f497a6a7df12877bebdb85ca6736d7922fbe43b9d31c66a37bc9be12d8f5bc491313917a55e72d6b237649dab05191f3dd11a45326291991e4e15415fd96716c2036cbc2862cf90078e7a90349591b456f437f17307014e7178c78266d20c5889d1722686b7999e51cf537fae88994581171c3a2fe95448221e3a7ffbe7aab4ad531d20066fff114d366d4ccf123bbc61f262797fc7ea23c0449e26c5bda075a806e7e26331e3fb33df60c2a75afd64cdbcfaf826c9946289931c9408f160fe59cbb39ba87506fa4bc7530efc3483f16e5a247780dccaed3f317d43bccfe03b843d60c28f2789f3710c7b9e671c2980412dff676c74eab6dbc18917d3edcdf3d02b74de81cf2a3599f1b90e841b9c1479476dfbcc52c4fbffff4a506a08bacb218d35ad2798dd823176985c2b8665acd1d6d88571035d83b55040c836d0fa3f5c265f15f8cb599a0b369df1bac659abae43d224e99c8d0c41e4581b079b88c03c6c8c7b57b10d480f17959cc3ade870f53803793f2fa962e0add3ba4084f3bbf7646e1529a8f1aa43f5029693aa76b915b874c3db91cbb98d831e89ff11cd9730160b64a08f786026cd6a9841674e225c648f5c78be6f7c3530cdc07599451a7cdc52f5549e29c8ed7a423cddc9cfa574d4ceb24a2b90bd4ab595e1ec72bd1172262f6574b17b9d4ff6446f2aed0161fcf462cc0f03aaf3bd6b6bad09d28a187558e21ae387f1eed75db0ef82962991ad5e39a1c91284fd997bda75ea0eebfb7d235457869d7ee7e68ab6e6364affaed913656c78860e52e336fe06ae90091311507fc648c239dfec03b065268a96408c82cd9869f86b72f45deed624ce0bf201ee64f28c0c31f1bf9f9f1ce16c5966567e1d85b914d67963ee6cb46e0753dfad3f242cf8b73a288911d5b32d8a56d2ccf218a37657158f4e2af5b7dde509a90151efeb67060b1fdc0fdf79e1be64057cc00bb15aa4e95ae34a7482b22ce2fbc107cb3e4d5f75d98bb6b92ec90c0906f180d7d2d641fc6388a959d7b770b31ba65f7aea169e3b0b678c3bf99a648a2b083e3b7a48e1b63eafc7bbedd7ba2c2dc9008d7ba6d493611e12a6ff4a5d64d987fd464f69dc0728cd0c81222ab7492e35f7424a18d4d8bfac20e11d8903af7f9d4e13ba1f1043b1b2557226b164bfd822ee11c70b3b28ab5331cf7b1a42f8b95ae1dfd6e20b0b7a789fac0b0de3bb575d5c594407c47735a7782889335866dbe0fa11dc66bf46e907d650bca226e7c6994ccdf5c98d6ca05f3bc0c8479019e674f130acf055ddf84c1f950063153c2ccadf81511d22fd39cfce1f6442768e2ea685eb0244685389eb30ec3f1593a2949283470e0baabf578a672f2d2637e33356334fb94288d97caf6a5381b6405e40bfeabcf7c6b3694c5aabe0b2c66c58fac95b27759c57f594cae87d9e03c1b599f4e361b22de4c1344bf45337308a6cb9db6a1265b9697844efeed110b7e743bc2efddee0882e58aa264466c5affff7b2fb51cd36f03725958de65b04fc8b383607a4c317c55b30471c8d9862ee0e8c62abdc987658904756a813010002d8d57f7febfb0523ab1c78fd20fc67c5d83f5b7677396e56d21211d97610cd0c5cadcafa0e3a0afd39ffece41f4baefa95b665811e28e12124ec30ee9201cb875feb86156887a4261074570ab9981c300f12d883435f35a5c2954d30e6a79010514b3194ba6fd5b8b09276674b66d54978f052f6bbad33eda881190a04960a74594c3de65d53adafae5607d64aee4cef4683a574dc92ccbccff4daa6599dc00f93bb51332de626eeb958aaea4f4c7580bac06d46fd461adb4d1b6fcdf2fe1c720a7bb9f9b133b2769f0409bba327e46aacee000291f8766e8d26c7a3dc700d6230011e961b0defe88744537a72e592da7500e9e5aabc2
Note: See TracChangeset for help on using the changeset viewer.