Changeset 3348260
- Timestamp:
- 08/21/2025 04:03:46 PM (8 months ago)
- Location:
- secure-passkeys/trunk
- Files:
-
- 6 edited
-
readme.txt (modified) (2 diffs)
-
secure-passkeys.php (modified) (2 diffs)
-
src/ajax/secure-passkeys-adminarea-ajax.php (modified) (7 diffs)
-
src/ajax/secure-passkeys-adminarea-settings-ajax.php (modified) (3 diffs)
-
src/ajax/secure-passkeys-frontend-ajax.php (modified) (3 diffs)
-
src/utils/secure-passkeys-webauthn-helper.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
secure-passkeys/trunk/readme.txt
r3342239 r3348260 5 5 Requires PHP: 7.4 6 6 Tested up to: 6.8 7 Stable tag: 1.2. 07 Stable tag: 1.2.1 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 150 150 151 151 == Changelog == 152 = 1.2.1 2025-08-21 = 153 * Add - Updated Microsoft Password Manager AAGUID icon. 154 * Add - Added Chromium Browser AAGUID icon (previously had no icon). 155 * Fix - Fixed “You are not authorized to make this request” error caused by missing or empty `HTTP_REFERER`. 156 152 157 = 1.2.0 2025-08-10 = 153 158 * Add - Added option to enable/disable passkeys reminder notice in WordPress admin for users without passkeys enabled. 154 159 * Add - Added support for Microsoft Password Manager authenticator with its AAGUID. 155 160 * Tweak - Changed excluded roles selection from multiple select dropdown to individual checkboxes for better usability. 156 * Fix ed- Improved autoloader class file path handling for better compatibility across different operating systems and environments.161 * Fix - Improved autoloader class file path handling for better compatibility across different operating systems and environments. 157 162 158 163 = 1.1.0 2025-08-04 = -
secure-passkeys/trunk/secure-passkeys.php
r3342239 r3348260 7 7 * Author: Mohamed Endisha 8 8 * Author URI: https://endisha.ly 9 * Version: 1.2. 09 * Version: 1.2.1 10 10 * Text Domain: secure-passkeys 11 11 * Domain Path: /src/languages/ … … 18 18 defined('ABSPATH') || exit; 19 19 20 define('SECURE_PASSKEYS_VERSION', '1.2. 0');20 define('SECURE_PASSKEYS_VERSION', '1.2.1'); 21 21 define('SECURE_PASSKEYS_PLUGIN_FILE', __FILE__); 22 22 define('SECURE_PASSKEYS_PLUGIN_DIR', __DIR__); -
secure-passkeys/trunk/src/ajax/secure-passkeys-adminarea-ajax.php
r3338906 r3348260 68 68 69 69 $records = (new Secure_Passkeys_WebAuthn())->get_all_paginate([ 70 'id', 'user_id', 'is_active', 'security_key_name', 'aaguid', 'last_used_at', 'created_at' 70 'id', 71 'user_id', 72 'is_active', 73 'security_key_name', 74 'aaguid', 75 'last_used_at', 76 'created_at' 71 77 ], 20, $filters); 72 78 … … 194 200 195 201 $message = $is_active_value ? __('The passkey activated successfully', 'secure-passkeys') 196 : __('The passkey deactivated successfully', 'secure-passkeys');202 : __('The passkey deactivated successfully', 'secure-passkeys'); 197 203 198 204 wp_send_json_success([ … … 211 217 212 218 $records = (new Secure_Passkeys_Log())->get_all_paginate([ 213 'id', 'user_id', 'security_key_name', 'aaguid', 'admin_id', 'log_type', 'ip_address', 'created_at' 219 'id', 220 'user_id', 221 'security_key_name', 222 'aaguid', 223 'admin_id', 224 'log_type', 225 'ip_address', 226 'created_at' 214 227 ], 20, $filters); 215 228 … … 227 240 private function throw_error_if_invalid_request() 228 241 { 229 $is_admin_requst = Secure_Passkeys_Helper::check_is_admin_request();230 231 242 $message = ''; 232 243 $missing_nonce = false; 233 244 234 if (! $is_admin_requst || !wp_doing_ajax()) {245 if (!wp_doing_ajax()) { 235 246 $message = __('You do not have permission to make this request.', 'secure-passkeys'); 236 247 } elseif ('POST' !== strtoupper(sanitize_text_field(wp_unslash($_SERVER['REQUEST_METHOD'] ?? '')))) { … … 241 252 } 242 253 254 $message = apply_filters('secure_passkeys_adminarea_invalid_request_error_message', $message); 255 243 256 if (!empty($message)) { 244 257 wp_send_json_error(['missing_nonce' => $missing_nonce, 'message' => $message]); … … 257 270 258 271 if ($should_check && !$has_permission) { 259 wp_send_json_error([ 260 'message' => __('You do not have permission to make this request.', 'secure-passkeys') 261 ]); 272 $message = __('You do not have permission to make this request.', 'secure-passkeys'); 273 $message = apply_filters('secure_passkeys_adminarea_invalid_access_error_message', $message); 274 275 wp_send_json_error(['message' => $message]); 262 276 } 263 277 } … … 266 280 { 267 281 if (Secure_Passkeys_Helper::is_user_in_excluded_roles($user_id)) { 268 wp_send_json_error(__('You are not allowed to make this request.', 'secure-passkeys')); 282 $message = __('You are not allowed to make this request.', 'secure-passkeys'); 283 $message = apply_filters('secure_passkeys_adminarea_invalid_permission_error_message', $message); 284 285 wp_send_json_error($message); 269 286 } 270 287 } -
secure-passkeys/trunk/src/ajax/secure-passkeys-adminarea-settings-ajax.php
r3342239 r3348260 71 71 private function throw_error_if_invalid_request() 72 72 { 73 $is_admin_requst = strpos(sanitize_text_field(wp_unslash($_SERVER['HTTP_REFERER'] ?? '')), admin_url()) !== false;74 75 73 $message = ''; 76 74 77 if (! $is_admin_requst || !wp_doing_ajax()) {75 if (!wp_doing_ajax()) { 78 76 $message = __('You do not have permission to make this request.', 'secure-passkeys'); 79 77 } elseif ('POST' !== strtoupper(sanitize_text_field(wp_unslash($_SERVER['REQUEST_METHOD'] ?? '')))) { … … 82 80 $message = __('Token mismatch, please refresh the page.', 'secure-passkeys'); 83 81 } 82 83 $message = apply_filters('secure_passkeys_adminarea_invalid_request_error_message', $message); 84 84 85 85 if (!empty($message)) { … … 94 94 $should_check = apply_filters('secure_passkeys_adminarea_should_check_access', true); 95 95 96 $capability = apply_filters('secure_passkeys_admin _menu_capability', 'manage_options');96 $capability = apply_filters('secure_passkeys_adminarea_menu_capability', 'manage_options'); 97 97 98 98 $has_permission = apply_filters('secure_passkeys_adminarea_check_settings_permission', current_user_can($capability, $user_id)); 99 99 100 100 if ($should_check && !$has_permission) { 101 wp_send_json_error([ 102 'message' => __('You do not have permission to make this request.', 'secure-passkeys') 103 ]); 101 $message = __('You do not have permission to make this request.', 'secure-passkeys'); 102 $message = apply_filters('secure_passkeys_adminarea_invalid_access_error_message', $message); 103 104 wp_send_json_error(['message' => $message]); 104 105 } 105 106 } -
secure-passkeys/trunk/src/ajax/secure-passkeys-frontend-ajax.php
r3338906 r3348260 71 71 72 72 (new Secure_Passkeys_Web_Authn_Sign_In_Action())->execute($data->user_id); 73 74 73 } catch (Exception $e) { 75 74 wp_send_json_error(__('Passkey authentication failed. Please try again.', 'secure-passkeys')); … … 242 241 } 243 242 243 $message = apply_filters('secure_passkeys_frontend_invalid_request_error_message', $message); 244 244 245 if (!empty($message)) { 245 246 wp_send_json_error($message); … … 250 251 { 251 252 if (Secure_Passkeys_Helper::is_user_in_excluded_roles(get_current_user_id())) { 252 wp_send_json_error(__('You are not allowed to make this request.', 'secure-passkeys')); 253 $message = __('You are not allowed to make this request.', 'secure-passkeys'); 254 $message = apply_filters('secure_passkeys_frontend_invalid_permission_error_message', $message); 255 256 wp_send_json_error($message); 253 257 } 254 258 } -
secure-passkeys/trunk/src/utils/secure-passkeys-webauthn-helper.php
r3342239 r3348260 61 61 ], 62 62 "b5397666-4885-aa6b-cebf-e52262a439a2" => [ 63 "name" => "Chromium Browser" 63 "name" => "Chromium Browser", 64 "icon" => "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnNDQiCiAgIHdpZHRoPSI1MTEuOTg0ODkiCiAgIGhlaWdodD0iNTExLjk4NDg5IgogICB2aWV3Qm94PSIwIDAgNTExLjk4NDg5IDUxMS45ODQ4OSIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczE4Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk3NSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ2MzMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMjMxLjYyNTc1LDAsMCwyMzEuNjI0NzIsMTExLjExMDEzLDE1OS45OTM2MykiCiAgICAgICB4Mj0iMC41NTY1NjM1IgogICAgICAgeDE9IjAuNDY1MjEyODgiCiAgICAgICB5MT0iLTAuNjczOTA2NTEiCiAgICAgICB5Mj0iMC44MTEyOTg2NyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDk3NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxOTcyZTciCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0OTcxIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTk2OWQ1IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNDk3MyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHhsaW5rOmhyZWY9IiMzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTMzMSIKICAgICAgIHgxPSIxMDEuNzQzODEiCiAgICAgICB5MT0iMzMuNzI2MTg5IgogICAgICAgeDI9IjEwMS41OTkxNSIKICAgICAgIHkyPSIxMzUuNDY2IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDMuNzc5NDIzNSwwLDAsMy43Nzk0MDY3LDAuMDAxNTE1NTUsMC4wMDM3Nzg2NSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSIzIgogICAgICAgeDI9IjEiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDYxLjI4NiwwLDAsNjEuMjg2LDI5LjM5OSw0Mi4zMzMpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMTM5NyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2FmY2NmYiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDEzOTkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4YmI1ZjgiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4bGluazpocmVmPSIjMSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI5NjIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoOTQuOTMxNTU5LDE2NC40MjY4NywtMTY0LjQyNzYsOTQuOTMxMTM3LDk3LjU1NTk5MSwxNzMuNjEwODMpIgogICAgICAgeDI9IjEuNzY5NTU0MSIKICAgICAgIHgxPSIwLjAxODIwMjU0NyIKICAgICAgIHkxPSItMC41MTE3MDE1OCIKICAgICAgIHkyPSIwLjQ5OTQzMzciIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSIxIgogICAgICAgeDI9IjEiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDI1LjExOCw0My41MDYsLTQzLjUwNiwyNS4xMTgsMjUuODEyLDQ1LjkzNSkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzMTIyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNjU5Y2Y2IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzEyNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzQyODVmNCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHhsaW5rOmhyZWY9IiMyIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjY4OCIKICAgICAgIHgxPSI2Ny40NTIzNzciCiAgICAgICB5MT0iNDAuMzIwNjk0IgogICAgICAgeDI9IjY3LjczMzAwMiIKICAgICAgIHkyPSI5NS4yNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgzLjc3OTQyMzUsMCwwLDMuNzc5NDA2NywwLjAwMTUwMDQzLDAuMDAzNzc4NjUpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iMiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMzNjgwZjAiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNjgyIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjY3OGVjIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjY4NCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxwYXRoCiAgICAgZD0ibSAyNTUuOTkzMTksMjU1Ljk5NDMzIDExMC44NTA0OSw2My45OTY3MSAtMTEwLjg1MDQ5LDE5MS45OTM4NSBjIDE0MS4zODA2OCwwIDI1NS45OTE3LC0xMTQuNjEwNTEgMjU1Ljk5MTcsLTI1NS45OTA1NiAwLC00Ni42NDE2NSAtMTIuNTM1NTksLTkwLjMzMTYgLTM0LjMzMTE1LC0xMjcuOTk3MTYgaCAtMjIxLjY2MzIgeiIKICAgICBpZD0icGF0aDM0LTQiCiAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDEzMzEpIiAvPgogIDxwYXRoCiAgICAgZD0iTSAyNTUuOTkwNTQsMCBDIDE2MS4yNDA0LDAgNzguNTc2ODQ4LDUxLjUxMzMxNCAzNC4zMTIyNCwxMjguMDI3NCBsIDExMC44Mjc4MSwxOTEuOTYzNjMgMTEwLjg1MDQ5LC02My45OTY3IFYgMTI3Ljk5NzE3IGggMjIxLjY2MzIgQyA0MzMuMzgxNTcsNTEuNTAxOTc1IDM1MC43MjkzNiwwIDI1NS45OTA1NCwwIFoiCiAgICAgaWQ9InBhdGgzNi0xIgogICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NjMzKSIgLz4KICA8cGF0aAogICAgIGQ9Im0gMC4wMDE1MTE3NywyNTUuOTk0MzMgYyAwLDE0MS4zODAwNSAxMTQuNjA3MjM4MjMsMjU1Ljk5MDU2IDI1NS45OTE2ODgyMywyNTUuOTkwNTYgTCAzNjYuODQzNjgsMzE5Ljk5MTAzIDI1NS45OTMyLDI1NS45OTQzMyAxNDUuMTQyNzEsMzE5Ljk5MTAzIDM0LjMxNDg5NywxMjguMDI3NCBDIDEyLjUzMTQzNCwxNjUuNjgyMzkgMCwyMDkuMzU2NDYgMCwyNTUuOTkwNTYiCiAgICAgaWQ9InBhdGgzOC03IgogICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyOTYyKSIgLz4KICA8cGF0aAogICAgIGQ9Im0gMzgzLjk5MDk0LDI1NS45OTQzMyBjIDAsNzAuNjkwMDMgLTU3LjMwNzQxLDEyNy45OTcxNyAtMTI3Ljk5Nzc1LDEyNy45OTcxNyAtNzAuNjkwMzQsMCAtMTI3Ljk5NzczLC01Ny4zMDcxNCAtMTI3Ljk5NzczLC0xMjcuOTk3MTcgMCwtNzAuNjkwMDIgNTcuMzA3MzksLTEyNy45OTcxNiAxMjcuOTk3NzMsLTEyNy45OTcxNiA3MC42OTAzNCwwIDEyNy45OTc3NSw1Ny4zMDcxNCAxMjcuOTk3NzUsMTI3Ljk5NzE2IgogICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgaWQ9InBhdGg0MCIgLz4KICA8cGF0aAogICAgIGQ9Im0gMzU5Ljk5MTU4LDI1NS45OTQzMyBjIDAsNTcuNDM1NjUgLTQ2LjU2MjQ5LDEwMy45OTc5NCAtMTAzLjk5ODM5LDEwMy45OTc5NCAtNTcuNDM1OSwwIC0xMDMuOTk4NCwtNDYuNTYyMjkgLTEwMy45OTg0LC0xMDMuOTk3OTQgMCwtNTcuNDM1NjQgNDYuNTYyNSwtMTAzLjk5NzkzIDEwMy45OTg0LC0xMDMuOTk3OTMgNTcuNDM1OSwwIDEwMy45OTgzOSw0Ni41NjIyOSAxMDMuOTk4MzksMTAzLjk5NzkzIgogICAgIGlkPSJwYXRoNDItNSIKICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MjY4OCkiIC8+Cjwvc3ZnPgo=", 64 65 ], 65 66 "771b48fd-d3d4-4f74-9232-fc157ab0507a" => [ … … 141 142 "d3452668-01fd-4c12-926c-83a4204853aa" => [ 142 143 "name" => "Microsoft Password Manager", 143 "icon" => "data:image/svg+xml;base64,PHN2ZyB pZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOnVybCgjbGluZWFyLWdyYWRpZW50KTt9LmNscy0ye29wYWNpdHk6MC4zNTtmaWxsOnVybCgjcmFkaWFsLWdyYWRpZW50KTt9LmNscy0yLC5jbHMtNHtpc29sYXRpb246aXNvbGF0ZTt9LmNscy0ze2ZpbGw6dXJsKCNsaW5lYXItZ3JhZGllbnQtMik7fS5jbHMtNHtvcGFjaXR5OjAuNDE7ZmlsbDp1cmwoI3JhZGlhbC1ncmFkaWVudC0yKTt9LmNscy01e2ZpbGw6dXJsKCNyYWRpYWwtZ3JhZGllbnQtMyk7fS5jbHMtNntmaWxsOnVybCgjcmFkaWFsLWdyYWRpZW50LTQpO308L3N0eWxlPjxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iNjMuMzMiIHkxPSI4NC4wMyIgeDI9IjI0MS42NyIgeTI9Ijg0LjAzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAyNjYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMGM1OWE0Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTE0YThiIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9InJhZGlhbC1ncmFkaWVudCIgY3g9IjE2MS44MyIgY3k9IjY4LjkxIiByPSI5NS4zOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAtMC45NSwgMCwgMjQ4Ljg0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMC43MiIgc3RvcC1vcGFjaXR5PSIwIi8+PHN0b3Agb2Zmc2V0PSIwLjk1IiBzdG9wLW9wYWNpdHk9IjAuNTMiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTIiIHgxPSIxNTcuMzUiIHkxPSIxNjEuMzkiIHgyPSI0NS45NiIgeTI9IjQwLjA2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAyNjYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWI5ZGUyIi8+PHN0b3Agb2Zmc2V0PSIwLjE2IiBzdG9wLWNvbG9yPSIjMTU5NWRmIi8+PHN0b3Agb2Zmc2V0PSIwLjY3IiBzdG9wLWNvbG9yPSIjMDY4MGQ3Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDA3OGQ0Ii8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9InJhZGlhbC1ncmFkaWVudC0yIiBjeD0iLTM0MC4yOSIgY3k9IjYyLjk5IiByPSIxNDMuMjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4xNSwgLTAuOTksIC0wLjgsIC0wLjEyLCAxNzYuNjQsIC0xMjUuNCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAuNzYiIHN0b3Atb3BhY2l0eT0iMCIvPjxzdG9wIG9mZnNldD0iMC45NSIgc3RvcC1vcGFjaXR5PSIwLjUiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0icmFkaWFsLWdyYWRpZW50LTMiIGN4PSIxMTMuMzciIGN5PSI1NzAuMjEiIHI9IjIwMi40MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4wNCwgMSwgMi4xMywgMC4wOCwgLTExNzkuNTQsIC0xMDYuNjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzVjMWYxIi8+PHN0b3Agb2Zmc2V0PSIwLjExIiBzdG9wLWNvbG9yPSIjMzRjMWVkIi8+PHN0b3Agb2Zmc2V0PSIwLjIzIiBzdG9wLWNvbG9yPSIjMmZjMmRmIi8+PHN0b3Agb2Zmc2V0PSIwLjMxIiBzdG9wLWNvbG9yPSIjMmJjM2QyIi8+PHN0b3Agb2Zmc2V0PSIwLjY3IiBzdG9wLWNvbG9yPSIjMzZjNzUyIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9InJhZGlhbC1ncmFkaWVudC00IiBjeD0iMzc2LjUyIiBjeT0iNTY3Ljk3IiByPSI5Ny4zNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjI4LCAwLjk2LCAwLjc4LCAtMC4yMywgLTMwMy43NiwgLTE0OC41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzY2ZWI2ZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzY2ZWI2ZSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHRpdGxlPkVkZ2VfTG9nb18yNjV4MjY1PC90aXRsZT48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yMzUuNjgsMTk1LjQ2YTkzLjczLDkzLjczLDAsMCwxLTEwLjU0LDQuNzEsMTAxLjg3LDEwMS44NywwLDAsMS0zNS45LDYuNDZjLTQ3LjMyLDAtODguNTQtMzIuNTUtODguNTQtNzQuMzJBMzEuNDgsMzEuNDgsMCwwLDEsMTE3LjEzLDEwNWMtNDIuOCwxLjgtNTMuOCw0Ni40LTUzLjgsNzIuNTMsMCw3My44OCw2OC4wOSw4MS4zNyw4Mi43Niw4MS4zNyw3LjkxLDAsMTkuODQtMi4zLDI3LTQuNTZsMS4zMS0uNDRBMTI4LjM0LDEyOC4zNCwwLDAsMCwyNDEsMjAxLjEsNCw0LDAsMCwwLDIzNS42OCwxOTUuNDZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNC42MyAtNC45MikiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yMzUuNjgsMTk1LjQ2YTkzLjczLDkzLjczLDAsMCwxLTEwLjU0LDQuNzEsMTAxLjg3LDEwMS44NywwLDAsMS0zNS45LDYuNDZjLTQ3LjMyLDAtODguNTQtMzIuNTUtODguNTQtNzQuMzJBMzEuNDgsMzEuNDgsMCwwLDEsMTE3LjEzLDEwNWMtNDIuOCwxLjgtNTMuOCw0Ni40LTUzLjgsNzIuNTMsMCw3My44OCw2OC4wOSw4MS4zNyw4Mi43Niw4MS4zNyw3LjkxLDAsMTkuODQtMi4zLDI3LTQuNTZsMS4zMS0uNDRBMTI4LjM0LDEyOC4zNCwwLDAsMCwyNDEsMjAxLjEsNCw0LDAsMCwwLDIzNS42OCwxOTUuNDZaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNC42MyAtNC45MikiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xMTAuMzQsMjQ2LjM0QTc5LjIsNzkuMiwwLDAsMSw4Ny42LDIyNSw4MC43Miw4MC43MiwwLDAsMSwxMTcuMTMsMTA1YzMuMTItMS40Nyw4LjQ1LTQuMTMsMTUuNTQtNGEzMi4zNSwzMi4zNSwwLDAsMSwyNS42OSwxMywzMS44OCwzMS44OCwwLDAsMSw2LjM2LDE4LjY2YzAtLjIxLDI0LjQ2LTc5LjYtODAtNzkuNi00My45LDAtODAsNDEuNjYtODAsNzguMjFhMTMwLjE1LDEzMC4xNSwwLDAsMCwxMi4xMSw1NiwxMjgsMTI4LDAsMCwwLDE1Ni4zOCw2Ny4xMSw3NS41NSw3NS41NSwwLDAsMS02Mi43OC04WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQuNjMgLTQuOTIpIi8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNMTEwLjM0LDI0Ni4zNEE3OS4yLDc5LjIsMCwwLDEsODcuNiwyMjUsODAuNzIsODAuNzIsMCwwLDEsMTE3LjEzLDEwNWMzLjEyLTEuNDcsOC40NS00LjEzLDE1LjU0LTRhMzIuMzUsMzIuMzUsMCwwLDEsMjUuNjksMTMsMzEuODgsMzEuODgsMCwwLDEsNi4zNiwxOC42NmMwLS4yMSwyNC40Ni03OS42LTgwLTc5LjYtNDMuOSwwLTgwLDQxLjY2LTgwLDc4LjIxYTEzMC4xNSwxMzAuMTUsMCwwLDAsMTIuMTEsNTYsMTI4LDEyOCwwLDAsMCwxNTYuMzgsNjcuMTEsNzUuNTUsNzUuNTUsMCwwLDEtNjIuNzgtOFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00LjYzIC00LjkyKSIvPjxwYXRoIGNsYXNzPSJjbHMtNSIgZD0iTTE1Ni45NCwxNTMuNzhjLS44MSwxLjA1LTMuMywyLjUtMy4zLDUuNjYsMCwyLjYxLDEuNyw1LjEyLDQuNzIsNy4yMywxNC4zOCwxMCw0MS40OSw4LjY4LDQxLjU2LDguNjhBNTkuNTYsNTkuNTYsMCwwLDAsMjMwLjE5LDE2N2E2MS4zOCw2MS4zOCwwLDAsMCwzMC40My01Mi44OGMuMjYtMjIuNDEtOC0zNy4zMS0xMS4zNC00My45MUMyMjguMDksMjguNzYsMTgyLjM1LDQuOTIsMTMyLjYxLDQuOTJhMTI4LDEyOCwwLDAsMC0xMjgsMTI2LjJjLjQ4LTM2LjU0LDM2LjgtNjYuMDUsODAtNjYuMDUsMy41LDAsMjMuNDYuMzQsNDIsMTAuMDcsMTYuMzQsOC41OCwyNC45LDE4Ljk0LDMwLjg1LDI5LjIxLDYuMTgsMTAuNjcsNy4yOCwyNC4xNSw3LjI4LDI5LjUyUzE2MiwxNDcuMiwxNTYuOTQsMTUzLjc4WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQuNjMgLTQuOTIpIi8+PHBhdGggY2xhc3M9ImNscy02IiBkPSJNMTU2Ljk0LDE1My43OGMtLjgxLDEuMDUtMy4zLDIuNS0zLjMsNS42NiwwLDIuNjEsMS43LDUuMTIsNC43Miw3LjIzLDE0LjM4LDEwLDQxLjQ5LDguNjgsNDEuNTYsOC42OEE1OS41Niw1OS41NiwwLDAsMCwyMzAuMTksMTY3YTYxLjM4LDYxLjM4LDAsMCwwLDMwLjQzLTUyLjg4Yy4yNi0yMi40MS04LTM3LjMxLTExLjM0LTQzLjkxQzIyOC4wOSwyOC43NiwxODIuMzUsNC45MiwxMzIuNjEsNC45MmExMjgsMTI4LDAsMCwwLTEyOCwxMjYuMmMuNDgtMzYuNTQsMzYuOC02Ni4wNSw4MC02Ni4wNSwzLjUsMCwyMy40Ni4zNCw0MiwxMC4wNywxNi4zNCw4LjU4LDI0LjksMTguOTQsMzAuODUsMjkuMjEsNi4xOCwxMC42Nyw3LjI4LDI0LjE1LDcuMjgsMjkuNTJTMTYyLDE0Ny4yLDE1Ni45NCwxNTMuNzhaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNC42MyAtNC45MikiLz48L3N2Zz4="144 "icon" => "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE4LjY0NDIgMTcuOTE2OEMxOC42NDQyIDEwLjM4NzIgMjQuNzYwNSA0LjI3MDk0IDMyLjI5MDEgNC4yNzA5NEMzOS43ODQgNC4yNzA5NCA0NS45MzU5IDEwLjE0MzUgNDUuOTM1OSAxNy43MDg0QzQ1LjkzNTkgMjUuMjM4IDM5LjgxOTcgMzEuMzU0MyAzMi4yOTAxIDMxLjM1NDNDMzEuMTg1MiAzMS4zNTQzIDMwLjA5NCAzMS4xOTYgMjkuMDU5MiAzMC45Mjk3QzI5LjAwODUgMzIuMzIzMyAyNy44NjI4IDMzLjQzNzYgMjYuNDU2NyAzMy40Mzc2SDIyLjgxMDlWMzcuMDgzNEMyMi44MTA5IDM4LjUyMTcgMjEuNjQ1IDM5LjY4NzYgMjAuMjA2NyAzOS42ODc2SDE2LjU2MDlWNDIuMjkxOEMxNi41NjA5IDQ0LjMwNTMgMTQuOTI4NiA0NS45Mzc2IDEyLjkxNTEgNDUuOTM3Nkg3LjcwNjc1QzUuNjkzMjEgNDUuOTM3NiA0LjA2MDkxIDQ0LjMwNTMgNC4wNjA5MSA0Mi4yOTE4VjM3Ljc2NzdDNC4wNjA5MSAzNi4yNDgyIDQuNjY0NTIgMzQuNzkwOSA1LjczODk1IDMzLjcxNjVMMTguNzMwMiAyMC43MjUzQzE4Ljg0MzYgMjAuNjExOCAxOC45MTE1IDIwLjQyODIgMTguODc0NCAyMC4yMTY4QzE4Ljc0ODggMTkuNTAwOSAxOC42NDQyIDE4LjcyMzQgMTguNjQ0MiAxNy45MTY4Wk0zOC4wMTkzIDE0LjU4MzVDMzguMDE5MyAxMy4xNDUyIDM2Ljg1MzQgMTEuOTc5MyAzNS40MTUyIDExLjk3OTNDMzMuOTc2OSAxMS45NzkzIDMyLjgxMSAxMy4xNDUyIDMyLjgxMSAxNC41ODM1QzMyLjgxMSAxNi4wMjE3IDMzLjk3NjkgMTcuMTg3NiAzNS40MTUyIDE3LjE4NzZDMzYuODUzNCAxNy4xODc2IDM4LjAxOTMgMTYuMDIxNyAzOC4wMTkzIDE0LjU4MzVaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMV8xMzYyKSIvPgo8ZyBjbGlwLXBhdGg9InVybCgjcGFpbnQxX2FuZ3VsYXJfMV8xMzYyX2NsaXBfcGF0aCkiIGRhdGEtZmlnbWEtc2tpcC1wYXJzZT0idHJ1ZSI+PGcgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMDIxMjc2NiAwLjAyMDc0NDcgMC4wMjU5OTQ5IDAuMDI2Mzk2OCAyMy40MDQzIDIzLjkzNjIpIj48Zm9yZWlnbk9iamVjdCB4PSItMTAyMC45IiB5PSItMTAyMC45IiB3aWR0aD0iMjA0MS44MSIgaGVpZ2h0PSIyMDQxLjgxIj48ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzdHlsZT0iYmFja2dyb3VuZDpjb25pYy1ncmFkaWVudChmcm9tIDkwZGVnLHJnYmEoMTcsIDEwNywgMTgzLCAxKSAwZGVnLHJnYmEoMTAsIDk4LCAxNjYsIDApIDM2MGRlZyk7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtvcGFjaXR5OjEiPjwvZGl2PjwvZm9yZWlnbk9iamVjdD48L2c+PC9nPjxwYXRoIGQ9Ik0xOC42NDQyIDE3LjkxNjhDMTguNjQ0MiAxMC4zODcyIDI0Ljc2MDUgNC4yNzA5NCAzMi4yOTAxIDQuMjcwOTRDMzkuNzg0IDQuMjcwOTQgNDUuOTM1OSAxMC4xNDM1IDQ1LjkzNTkgMTcuNzA4NEM0NS45MzU5IDI1LjIzOCAzOS44MTk3IDMxLjM1NDMgMzIuMjkwMSAzMS4zNTQzQzMxLjE4NTIgMzEuMzU0MyAzMC4wOTQgMzEuMTk2IDI5LjA1OTIgMzAuOTI5N0MyOS4wMDg1IDMyLjMyMzMgMjcuODYyOCAzMy40Mzc2IDI2LjQ1NjcgMzMuNDM3NkgyMi44MTA5VjM3LjA4MzRDMjIuODEwOSAzOC41MjE3IDIxLjY0NSAzOS42ODc2IDIwLjIwNjcgMzkuNjg3NkgxNi41NjA5VjQyLjI5MThDMTYuNTYwOSA0NC4zMDUzIDE0LjkyODYgNDUuOTM3NiAxMi45MTUxIDQ1LjkzNzZINy43MDY3NUM1LjY5MzIxIDQ1LjkzNzYgNC4wNjA5MSA0NC4zMDUzIDQuMDYwOTEgNDIuMjkxOFYzNy43Njc3QzQuMDYwOTEgMzYuMjQ4MiA0LjY2NDUyIDM0Ljc5MDkgNS43Mzg5NSAzMy43MTY1TDE4LjczMDIgMjAuNzI1M0MxOC44NDM2IDIwLjYxMTggMTguOTExNSAyMC40MjgyIDE4Ljg3NDQgMjAuMjE2OEMxOC43NDg4IDE5LjUwMDkgMTguNjQ0MiAxOC43MjM0IDE4LjY0NDIgMTcuOTE2OFpNMzguMDE5MyAxNC41ODM1QzM4LjAxOTMgMTMuMTQ1MiAzNi44NTM0IDExLjk3OTMgMzUuNDE1MiAxMS45NzkzQzMzLjk3NjkgMTEuOTc5MyAzMi44MTEgMTMuMTQ1MiAzMi44MTEgMTQuNTgzNUMzMi44MTEgMTYuMDIxNyAzMy45NzY5IDE3LjE4NzYgMzUuNDE1MiAxNy4xODc2QzM2Ljg1MzQgMTcuMTg3NiAzOC4wMTkzIDE2LjAyMTcgMzguMDE5MyAxNC41ODM1WiIgZGF0YS1maWdtYS1ncmFkaWVudC1maWxsPSJ7JiMzNDt0eXBlJiMzNDs6JiMzNDtHUkFESUVOVF9BTkdVTEFSJiMzNDssJiMzNDtzdG9wcyYjMzQ7Olt7JiMzNDtjb2xvciYjMzQ7OnsmIzM0O3ImIzM0OzowLjA2ODU4ODY1MTcxNjcwOTEzNywmIzM0O2cmIzM0OzowLjQyMDg1NTkzOTM4ODI3NTE1LCYjMzQ7YiYjMzQ7OjAuNzIxMjEwMTgxNzEzMTA0MjUsJiMzNDthJiMzNDs6MS4wfSwmIzM0O3Bvc2l0aW9uJiMzNDs6MC4wfSx7JiMzNDtjb2xvciYjMzQ7OnsmIzM0O3ImIzM0OzowLjAzOTIxNTY4NzY2MjM2MzA1MiwmIzM0O2cmIzM0OzowLjM4NDMxMzczMjM4NTYzNTM4LCYjMzQ7YiYjMzQ7OjAuNjUwOTgwNDEyOTYwMDUyNDksJiMzNDthJiMzNDs6MC4wfSwmIzM0O3Bvc2l0aW9uJiMzNDs6MS4wfV0sJiMzNDtzdG9wc1ZhciYjMzQ7Olt7JiMzNDtjb2xvciYjMzQ7OnsmIzM0O3ImIzM0OzowLjA2ODU4ODY1MTcxNjcwOTEzNywmIzM0O2cmIzM0OzowLjQyMDg1NTkzOTM4ODI3NTE1LCYjMzQ7YiYjMzQ7OjAuNzIxMjEwMTgxNzEzMTA0MjUsJiMzNDthJiMzNDs6MS4wfSwmIzM0O3Bvc2l0aW9uJiMzNDs6MC4wfSx7JiMzNDtjb2xvciYjMzQ7OnsmIzM0O3ImIzM0OzowLjAzOTIxNTY4NzY2MjM2MzA1MiwmIzM0O2cmIzM0OzowLjM4NDMxMzczMjM4NTYzNTM4LCYjMzQ7YiYjMzQ7OjAuNjUwOTgwNDEyOTYwMDUyNDksJiMzNDthJiMzNDs6MC4wfSwmIzM0O3Bvc2l0aW9uJiMzNDs6MS4wfV0sJiMzNDt0cmFuc2Zvcm0mIzM0Ozp7JiMzNDttMDAmIzM0OzotNDIuNTUzMTk1OTUzMzY5MTQxLCYjMzQ7bTAxJiMzNDs6NTEuOTg5Nzg4MDU1NDE5OTIyLCYjMzQ7bTAyJiMzNDs6MTguNjg1OTg5Mzc5ODgyODEyLCYjMzQ7bTEwJiMzNDs6NDEuNDg5MzYwODA5MzI2MTcyLCYjMzQ7bTExJiMzNDs6NTIuNzkzNTEwNDM3MDExNzE5LCYjMzQ7bTEyJiMzNDs6LTIzLjIwNTIzMjYyMDIzOTI1OH0sJiMzNDtvcGFjaXR5JiMzNDs6MS4wLCYjMzQ7YmxlbmRNb2RlJiMzNDs6JiMzNDtOT1JNQUwmIzM0OywmIzM0O3Zpc2libGUmIzM0Ozp0cnVlfSIvPgo8cGF0aCBkPSJNMTguNjQ0MiAxNy45MTY4QzE4LjY0NDIgMTAuMzg3MiAyNC43NjA1IDQuMjcwOTQgMzIuMjkwMSA0LjI3MDk0QzM5Ljc4NCA0LjI3MDk0IDQ1LjkzNTkgMTAuMTQzNSA0NS45MzU5IDE3LjcwODRDNDUuOTM1OSAyNS4yMzggMzkuODE5NyAzMS4zNTQzIDMyLjI5MDEgMzEuMzU0M0MzMS4xODUyIDMxLjM1NDMgMzAuMDk0IDMxLjE5NiAyOS4wNTkyIDMwLjkyOTdDMjkuMDA4NSAzMi4zMjMzIDI3Ljg2MjggMzMuNDM3NiAyNi40NTY3IDMzLjQzNzZIMjIuODEwOVYzNy4wODM0QzIyLjgxMDkgMzguNTIxNyAyMS42NDUgMzkuNjg3NiAyMC4yMDY3IDM5LjY4NzZIMTYuNTYwOVY0Mi4yOTE4QzE2LjU2MDkgNDQuMzA1MyAxNC45Mjg2IDQ1LjkzNzYgMTIuOTE1MSA0NS45Mzc2SDcuNzA2NzVDNS42OTMyMSA0NS45Mzc2IDQuMDYwOTEgNDQuMzA1MyA0LjA2MDkxIDQyLjI5MThWMzcuNzY3N0M0LjA2MDkxIDM2LjI0ODIgNC42NjQ1MiAzNC43OTA5IDUuNzM4OTUgMzMuNzE2NUwxOC43MzAyIDIwLjcyNTNDMTguODQzNiAyMC42MTE4IDE4LjkxMTUgMjAuNDI4MiAxOC44NzQ0IDIwLjIxNjhDMTguNzQ4OCAxOS41MDA5IDE4LjY0NDIgMTguNzIzNCAxOC42NDQyIDE3LjkxNjhaTTM4LjAxOTMgMTQuNTgzNUMzOC4wMTkzIDEzLjE0NTIgMzYuODUzNCAxMS45NzkzIDM1LjQxNTIgMTEuOTc5M0MzMy45NzY5IDExLjk3OTMgMzIuODExIDEzLjE0NTIgMzIuODExIDE0LjU4MzVDMzIuODExIDE2LjAyMTcgMzMuOTc2OSAxNy4xODc2IDM1LjQxNTIgMTcuMTg3NkMzNi44NTM0IDE3LjE4NzYgMzguMDE5MyAxNi4wMjE3IDM4LjAxOTMgMTQuNTgzNVoiIGZpbGw9InVybCgjcGFpbnQyX3JhZGlhbF8xXzEzNjIpIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9InBhaW50MV9hbmd1bGFyXzFfMTM2Ml9jbGlwX3BhdGgiPjxwYXRoIGQ9Ik0xOC42NDQyIDE3LjkxNjhDMTguNjQ0MiAxMC4zODcyIDI0Ljc2MDUgNC4yNzA5NCAzMi4yOTAxIDQuMjcwOTRDMzkuNzg0IDQuMjcwOTQgNDUuOTM1OSAxMC4xNDM1IDQ1LjkzNTkgMTcuNzA4NEM0NS45MzU5IDI1LjIzOCAzOS44MTk3IDMxLjM1NDMgMzIuMjkwMSAzMS4zNTQzQzMxLjE4NTIgMzEuMzU0MyAzMC4wOTQgMzEuMTk2IDI5LjA1OTIgMzAuOTI5N0MyOS4wMDg1IDMyLjMyMzMgMjcuODYyOCAzMy40Mzc2IDI2LjQ1NjcgMzMuNDM3NkgyMi44MTA5VjM3LjA4MzRDMjIuODEwOSAzOC41MjE3IDIxLjY0NSAzOS42ODc2IDIwLjIwNjcgMzkuNjg3NkgxNi41NjA5VjQyLjI5MThDMTYuNTYwOSA0NC4zMDUzIDE0LjkyODYgNDUuOTM3NiAxMi45MTUxIDQ1LjkzNzZINy43MDY3NUM1LjY5MzIxIDQ1LjkzNzYgNC4wNjA5MSA0NC4zMDUzIDQuMDYwOTEgNDIuMjkxOFYzNy43Njc3QzQuMDYwOTEgMzYuMjQ4MiA0LjY2NDUyIDM0Ljc5MDkgNS43Mzg5NSAzMy43MTY1TDE4LjczMDIgMjAuNzI1M0MxOC44NDM2IDIwLjYxMTggMTguOTExNSAyMC40MjgyIDE4Ljg3NDQgMjAuMjE2OEMxOC43NDg4IDE5LjUwMDkgMTguNjQ0MiAxOC43MjM0IDE4LjY0NDIgMTcuOTE2OFpNMzguMDE5MyAxNC41ODM1QzM4LjAxOTMgMTMuMTQ1MiAzNi44NTM0IDExLjk3OTMgMzUuNDE1MiAxMS45NzkzQzMzLjk3NjkgMTEuOTc5MyAzMi44MTEgMTMuMTQ1MiAzMi44MTEgMTQuNTgzNUMzMi44MTEgMTYuMDIxNyAzMy45NzY5IDE3LjE4NzYgMzUuNDE1MiAxNy4xODc2QzM2Ljg1MzQgMTcuMTg3NiAzOC4wMTkzIDE2LjAyMTcgMzguMDE5MyAxNC41ODM1WiIvPjwvY2xpcFBhdGg+PGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzFfMTM2MiIgeDE9IjM0LjkzMTYiIHkxPSIxMy42OTg2IiB4Mj0iNC4yNTYyIiB5Mj0iNDMuMTMyMiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMkFCOEY1Ii8+CjxzdG9wIG9mZnNldD0iMC4yNTQ4MDgiIHN0b3AtY29sb3I9IiMzMEFCRTAiLz4KPHN0b3Agb2Zmc2V0PSIwLjUxOTIzMSIgc3RvcC1jb2xvcj0iIzE1OTVERiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwMjc2QzMiLz4KPC9saW5lYXJHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDJfcmFkaWFsXzFfMTM2MiIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgyNC4yMDIyIDcuNDQ2ODQpIHJvdGF0ZSg3MS4zNTA1KSBzY2FsZSgyMi40NTU3IDkxLjk5NTQpIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzJBQjhGNiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUI4RjYiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=" 144 145 ], 145 146 ];
Note: See TracChangeset
for help on using the changeset viewer.