Plugin Directory

Changeset 3348260


Ignore:
Timestamp:
08/21/2025 04:03:46 PM (8 months ago)
Author:
endisha
Message:

Release 1.2.1

Location:
secure-passkeys/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • secure-passkeys/trunk/readme.txt

    r3342239 r3348260  
    55Requires PHP: 7.4
    66Tested up to: 6.8
    7 Stable tag: 1.2.0
     7Stable tag: 1.2.1
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    150150
    151151== 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
    152157= 1.2.0 2025-08-10 =
    153158* Add - Added option to enable/disable passkeys reminder notice in WordPress admin for users without passkeys enabled.
    154159* Add - Added support for Microsoft Password Manager authenticator with its AAGUID.
    155160* Tweak - Changed excluded roles selection from multiple select dropdown to individual checkboxes for better usability.
    156 * Fixed - 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.
    157162
    158163= 1.1.0 2025-08-04 =
  • secure-passkeys/trunk/secure-passkeys.php

    r3342239 r3348260  
    77 * Author: Mohamed Endisha
    88 * Author URI: https://endisha.ly
    9  * Version: 1.2.0
     9 * Version: 1.2.1
    1010 * Text Domain: secure-passkeys
    1111 * Domain Path: /src/languages/
     
    1818defined('ABSPATH') || exit;
    1919
    20 define('SECURE_PASSKEYS_VERSION', '1.2.0');
     20define('SECURE_PASSKEYS_VERSION', '1.2.1');
    2121define('SECURE_PASSKEYS_PLUGIN_FILE', __FILE__);
    2222define('SECURE_PASSKEYS_PLUGIN_DIR', __DIR__);
  • secure-passkeys/trunk/src/ajax/secure-passkeys-adminarea-ajax.php

    r3338906 r3348260  
    6868
    6969        $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'
    7177        ], 20, $filters);
    7278
     
    194200
    195201        $message = $is_active_value ? __('The passkey activated successfully', 'secure-passkeys')
    196         : __('The passkey deactivated successfully', 'secure-passkeys');
     202            : __('The passkey deactivated successfully', 'secure-passkeys');
    197203
    198204        wp_send_json_success([
     
    211217
    212218        $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'
    214227        ], 20, $filters);
    215228
     
    227240    private function throw_error_if_invalid_request()
    228241    {
    229         $is_admin_requst = Secure_Passkeys_Helper::check_is_admin_request();
    230 
    231242        $message = '';
    232243        $missing_nonce = false;
    233244
    234         if (!$is_admin_requst || !wp_doing_ajax()) {
     245        if (!wp_doing_ajax()) {
    235246            $message = __('You do not have permission to make this request.', 'secure-passkeys');
    236247        } elseif ('POST' !== strtoupper(sanitize_text_field(wp_unslash($_SERVER['REQUEST_METHOD'] ?? '')))) {
     
    241252        }
    242253
     254        $message = apply_filters('secure_passkeys_adminarea_invalid_request_error_message', $message);
     255
    243256        if (!empty($message)) {
    244257            wp_send_json_error(['missing_nonce' => $missing_nonce, 'message' => $message]);
     
    257270
    258271        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]);
    262276        }
    263277    }
     
    266280    {
    267281        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);
    269286        }
    270287    }
  • secure-passkeys/trunk/src/ajax/secure-passkeys-adminarea-settings-ajax.php

    r3342239 r3348260  
    7171    private function throw_error_if_invalid_request()
    7272    {
    73         $is_admin_requst = strpos(sanitize_text_field(wp_unslash($_SERVER['HTTP_REFERER'] ?? '')), admin_url()) !== false;
    74 
    7573        $message = '';
    7674
    77         if (!$is_admin_requst || !wp_doing_ajax()) {
     75        if (!wp_doing_ajax()) {
    7876            $message = __('You do not have permission to make this request.', 'secure-passkeys');
    7977        } elseif ('POST' !== strtoupper(sanitize_text_field(wp_unslash($_SERVER['REQUEST_METHOD'] ?? '')))) {
     
    8280            $message = __('Token mismatch, please refresh the page.', 'secure-passkeys');
    8381        }
     82
     83        $message = apply_filters('secure_passkeys_adminarea_invalid_request_error_message', $message);
    8484
    8585        if (!empty($message)) {
     
    9494        $should_check = apply_filters('secure_passkeys_adminarea_should_check_access', true);
    9595
    96         $capability = apply_filters('secure_passkeys_admin_menu_capability', 'manage_options');
     96        $capability = apply_filters('secure_passkeys_adminarea_menu_capability', 'manage_options');
    9797
    9898        $has_permission = apply_filters('secure_passkeys_adminarea_check_settings_permission', current_user_can($capability, $user_id));
    9999
    100100        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]);
    104105        }
    105106    }
  • secure-passkeys/trunk/src/ajax/secure-passkeys-frontend-ajax.php

    r3338906 r3348260  
    7171
    7272            (new Secure_Passkeys_Web_Authn_Sign_In_Action())->execute($data->user_id);
    73 
    7473        } catch (Exception $e) {
    7574            wp_send_json_error(__('Passkey authentication failed. Please try again.', 'secure-passkeys'));
     
    242241        }
    243242
     243        $message = apply_filters('secure_passkeys_frontend_invalid_request_error_message', $message);
     244
    244245        if (!empty($message)) {
    245246            wp_send_json_error($message);
     
    250251    {
    251252        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);
    253257        }
    254258    }
  • secure-passkeys/trunk/src/utils/secure-passkeys-webauthn-helper.php

    r3342239 r3348260  
    6161        ],
    6262        "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=",
    6465        ],
    6566        "771b48fd-d3d4-4f74-9232-fc157ab0507a" => [
     
    141142        "d3452668-01fd-4c12-926c-83a4204853aa" => [
    142143            "name" => "Microsoft Password Manager",
    143             "icon" => "data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+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="
    144145        ],
    145146    ];
Note: See TracChangeset for help on using the changeset viewer.