share
9 years ago
.htaccess
11 years ago
anti_malware.php
5 years ago
class-api.php
4 weeks ago
class-centralised-logging.php
4 weeks ago
class-coupon.php
7 months ago
class-email-sodium.php
4 weeks ago
class-firewall-log.php
4 weeks ago
class-helpers.php
9 months ago
class-import-export.php
5 months ago
class-ip.php
5 months ago
class-nfw-database.php
7 months ago
class-plugin-upgrade.php
4 weeks ago
class-security-updates.php
4 weeks ago
class-session.php
4 weeks ago
class_mail.php
4 weeks ago
firewall.php
4 weeks ago
fw_fileguard.php
5 months ago
fw_livelog.php
1 year ago
help.php
4 weeks ago
helpers.php
4 weeks ago
i18n-extra.php
4 weeks ago
i18n.php
1 year ago
index.html
13 years ago
init_update.php
2 years ago
install.php
1 year ago
install_default.php
4 weeks ago
loader.php
7 months ago
mail_template_firewall.php
1 year ago
mail_template_plugin.php
4 weeks ago
scheduled_tasks.php
3 years ago
settings_dashboard.php
4 weeks ago
settings_dashboard_about.php
4 weeks ago
settings_dashboard_statistics.php
2 months ago
settings_event_notifications.php
4 weeks ago
settings_events.php
2 months ago
settings_firewall_options.php
2 months ago
settings_firewall_policies.php
4 weeks ago
settings_login_protection.php
2 months ago
settings_logs.php
4 weeks ago
settings_logs_firewall_log.php
4 weeks ago
settings_logs_live_log.php
2 months ago
settings_monitoring.php
4 weeks ago
settings_monitoring_file_check.php
2 months ago
settings_monitoring_file_guard.php
2 months ago
settings_network.php
2 months ago
settings_security_rules.php
2 months ago
settings_security_rules_editor.php
4 weeks ago
settings_security_rules_update.php
4 weeks ago
sign.pub
7 years ago
thickbox.php
4 years ago
widget.php
3 years ago
wpplus.php
5 months ago
settings_logs_live_log.php
302 lines
| 1 | <?php |
| 2 | /* |
| 3 | +---------------------------------------------------------------------+ |
| 4 | | NinjaFirewall (WP Edition) | |
| 5 | | | |
| 6 | | (c) NinTechNet - https://nintechnet.com/ | |
| 7 | +---------------------------------------------------------------------+ |
| 8 | | This program is free software: you can redistribute it and/or | |
| 9 | | modify it under the terms of the GNU General Public License as | |
| 10 | | published by the Free Software Foundation, either version 3 of | |
| 11 | | the License, or (at your option) any later version. | |
| 12 | | | |
| 13 | | This program is distributed in the hope that it will be useful, | |
| 14 | | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | | GNU General Public License for more details. | |
| 17 | +---------------------------------------------------------------------+ 2023-05-14 |
| 18 | */ |
| 19 | |
| 20 | if (! defined('NFW_ENGINE_VERSION') ) { |
| 21 | die('Forbidden'); |
| 22 | } |
| 23 | |
| 24 | // Block immediately if user is not allowed : |
| 25 | nf_not_allowed('block', __LINE__ ); |
| 26 | |
| 27 | if (! defined('NF_DISABLED') ) { |
| 28 | is_nfw_enabled(); |
| 29 | } |
| 30 | if ( NF_DISABLED ) { |
| 31 | $err_msg = esc_html__('Error: NinjaFirewall must be enabled and working '. |
| 32 | 'in order to use this feature.', 'ninjafirewall'); |
| 33 | } |
| 34 | if ( empty( NinjaFirewall_session::read('nfw_goodguy') ) ) { |
| 35 | $err_msg = esc_html__('Warning: You must be whitelisted in order to use Live Log: click on '. |
| 36 | 'the Firewall Policies menu and ensure that the "Add the Administrator to the whitelist" '. |
| 37 | 'option is enabled.', 'ninjafirewall'); |
| 38 | } |
| 39 | if (! empty( $err_msg ) ) { |
| 40 | ?> |
| 41 | <div class="wrap"> |
| 42 | <h1><img style="vertical-align:top;" src="<?php |
| 43 | echo esc_url( plugins_url('/images/ninjafirewall_32.png', |
| 44 | dirname( __FILE__ ) ) ) |
| 45 | ?>"> <?php esc_html_e('Live Log', 'ninjafirewall') ?></h1> |
| 46 | |
| 47 | <br /> |
| 48 | <div class="error notice is-dismissible"><p><?php echo $err_msg ?></p></div> |
| 49 | </div> |
| 50 | <?php |
| 51 | return; |
| 52 | } |
| 53 | |
| 54 | // Create an empty log et set the required session |
| 55 | @file_put_contents( |
| 56 | NFW_LOG_DIR .'/nfwlog/cache/livelog.php', |
| 57 | '<?php exit; ?>', |
| 58 | LOCK_EX |
| 59 | ); |
| 60 | |
| 61 | NinjaFirewall_session::write( ['nfw_livelog' => 1 ] ); |
| 62 | |
| 63 | if (! isset($_COOKIE['nfwscroll']) || ! empty($_COOKIE['nfwscroll']) ) { |
| 64 | // Default, if not set |
| 65 | $nfwscroll = 1; |
| 66 | } else { |
| 67 | $nfwscroll = 0; |
| 68 | } |
| 69 | if ( empty($_COOKIE['nfwlwrap']) ) { |
| 70 | // Default, if not set |
| 71 | $nfwlwrap = 0; |
| 72 | } else { |
| 73 | $nfwlwrap = 1; |
| 74 | } |
| 75 | if ( isset( $_COOKIE['nfwintval']) && |
| 76 | preg_match('/^(5|10|20|45)000$/', $_COOKIE['nfwintval'] ) ) { |
| 77 | |
| 78 | $nfwintval = (int) $_COOKIE['nfwintval']; |
| 79 | } else { |
| 80 | $nfwintval = 10000; |
| 81 | } |
| 82 | if ( NFW_IS_HTTPS == true ) { |
| 83 | $nfwsite = site_url('/index.php', 'https'); |
| 84 | } else { |
| 85 | $nfwsite = site_url('/index.php'); |
| 86 | } |
| 87 | ?> |
| 88 | <script> |
| 89 | var liveinterval = <?php echo $nfwintval ?>; |
| 90 | var scroll = <?php echo $nfwscroll ?>; |
| 91 | var lwrap = <?php echo $nfwlwrap ?>; |
| 92 | var site_url = '<?php echo esc_js( $nfwsite ) ?>'; |
| 93 | </script> |
| 94 | |
| 95 | <?php |
| 96 | if ( isset( $_POST['lf'] ) ) { |
| 97 | $res = nf_sub_liveloge_save(); |
| 98 | if ( $res ) { |
| 99 | echo '<div class="error notice is-dismissible"><p>'. $res .'</p></div>'; |
| 100 | } else { |
| 101 | echo '<div class="updated notice is-dismissible"><p>'. |
| 102 | esc_html__('Your changes have been saved.', 'ninjafirewall') .'</p></div>'; |
| 103 | } |
| 104 | } |
| 105 | $nfw_options = nfw_get_option('nfw_options'); |
| 106 | |
| 107 | if ( defined('NFW_TEXTAREA_HEIGHT') ) { |
| 108 | $th = (int) NFW_TEXTAREA_HEIGHT; |
| 109 | } else { |
| 110 | $th = '450'; |
| 111 | } |
| 112 | ?> |
| 113 | <form name="liveform"> |
| 114 | <table class="form-table"> |
| 115 | <tr> |
| 116 | <td style="width:100%;text-align:center;"> |
| 117 | <progress id="nfw-progress" value="1" max="<?php echo ($nfwintval/1000) ?>" class="nfw-progress" style="display:none"></progress> |
| 118 | <br /> |
| 119 | <textarea name="txtlog" id="idtxtlog" class="large-text code" style="height:<?php echo $th; ?>px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php echo esc_textarea( __('Live Log lets you watch your blog traffic in real time. To enable it, click on the button below.', 'ninjafirewall') ) ?></textarea> |
| 120 | <br /> |
| 121 | <div style="float:left;width:40%;padding-top:10px;" class="nfw-right"> |
| 122 | <?php nfw_toggle_switch('danger', 'nfw_options[wf_case]', esc_attr__('Enabled', 'ninjafirewall'), esc_attr__('Disabled', 'ninjafirewall'), 'large', 0, false, 'onclick="nfwjs_livelog()"', 'livelog-switch', 'right') ?> |
| 123 | </div> |
| 124 | <div style="float:right;width:60%;text-align:left;padding-top:10px;" class="nfw-left"> |
| 125 | <?php esc_html_e('Refresh rate:', 'ninjafirewall') ?> |
| 126 | <select name="liveint" id="liveint" onchange="nfwjs_change_int(this.value);"> |
| 127 | <option value="5000"<?php selected( $nfwintval, 5000 ) ?>><?php esc_html_e('5 seconds', 'ninjafirewall') ?></option> |
| 128 | <option value="10000"<?php selected( $nfwintval, 10000 ) ?>><?php esc_html_e('10 seconds', 'ninjafirewall') ?></option> |
| 129 | <option value="20000"<?php selected( $nfwintval, 20000 ) ?>><?php esc_html_e('20 seconds', 'ninjafirewall') ?></option> |
| 130 | <option value="45000"<?php selected( $nfwintval, 45000 ) ?>><?php esc_html_e('45 seconds', 'ninjafirewall') ?></option> |
| 131 | </select> |
| 132 | <input type="button" class="button-secondary" name="livecls" value="<?php esc_html_e('Clear screen', 'ninjafirewall') ?>" onClick="nfwjs_cls()" /> |
| 133 | <label><input type="checkbox" name="livescroll" id="livescroll" value="1" onchange="nfwjs_is_scroll()" <?php checked($nfwscroll, 1)?> /><?php esc_html_e('Autoscrolling', 'ninjafirewall') ?></label> |
| 134 | |
| 135 | <label><input type="checkbox" name="linewrapping" id="linewrapping" value="1" onchange="nfwjs_linewrapping()" <?php checked($nfwlwrap, 1)?> /><?php esc_html_e('Line wrapping', 'ninjafirewall') ?></label> |
| 136 | </div> |
| 137 | </td> |
| 138 | </tr> |
| 139 | </table> |
| 140 | <p class="description alignright"><?php esc_html_e('Live Log will not display whitelisted users and brute-force attacks.', 'ninjafirewall') ?></p> |
| 141 | </form> |
| 142 | <?php |
| 143 | |
| 144 | if ( empty( $nfw_options['liveformat'] ) ) { |
| 145 | $lf = 0; |
| 146 | $liveformat = ''; |
| 147 | } else { |
| 148 | $lf = 1; |
| 149 | $liveformat = $nfw_options['liveformat']; |
| 150 | } |
| 151 | |
| 152 | if ( empty( $nfw_options['liveport'] ) || |
| 153 | ! preg_match('/^[1-2]$/', $nfw_options['liveport'] ) ) { |
| 154 | |
| 155 | $liveport = 0; |
| 156 | } else { |
| 157 | $liveport = $nfw_options['liveport']; |
| 158 | } |
| 159 | if ( empty( $nfw_options['livetz'] ) || |
| 160 | preg_match('/[^\w\/]/', $nfw_options['livetz'] ) ) { |
| 161 | |
| 162 | $livetz = 'UTC'; |
| 163 | } else { |
| 164 | $livetz = $nfw_options['livetz']; |
| 165 | } |
| 166 | if ( empty( $nfw_options['liverules'] ) || |
| 167 | ! preg_match('/^[0-2]$/', $nfw_options['liverules'] ) ) { |
| 168 | |
| 169 | $liverules = 0; |
| 170 | $lr_disabled = 'disabled="disabled" '; |
| 171 | } else { |
| 172 | $liverules = $nfw_options['liverules']; |
| 173 | $lr_disabled = ''; |
| 174 | } |
| 175 | if ( empty( $nfw_options['liverulespath'] ) ) { |
| 176 | $liverulespath = ''; |
| 177 | } else{ |
| 178 | $liverulespath = $nfw_options['liverulespath']; |
| 179 | } |
| 180 | ?> |
| 181 | <br /> |
| 182 | <form method="post"> |
| 183 | <h3><?php esc_html_e('Live Log Options', 'ninjafirewall') ?></h3> |
| 184 | <table class="form-table nfw-table"> |
| 185 | <tr> |
| 186 | <th scope="row" class="row-med"><?php esc_html_e('Inclusion and exclusion filters (REQUEST_URI)', 'ninjafirewall') ?></th> |
| 187 | <td> |
| 188 | <select name="liverules" onchange="nfwjs_lv_select(this.value);"> |
| 189 | <option value="0"<?php selected($liverules, 0) ?>><?php esc_html_e('None', 'ninjafirewall') ?></option> |
| 190 | <option value="1"<?php selected($liverules, 1) ?>><?php esc_html_e('Must include', 'ninjafirewall') ?></option> |
| 191 | <option value="2"<?php selected($liverules, 2) ?>><?php esc_html_e('Must not include', 'ninjafirewall') ?></option> |
| 192 | </select> |
| 193 | <input <?php echo $lr_disabled; ?>type="text" id="lr-disabled" class="regular-text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="liverulespath" value="<?php echo esc_attr( $liverulespath ) ?>" placeholder="<?php esc_attr_e('e.g.,', 'ninjafirewall') ?> /blog <?php esc_attr_e('or', 'ninjafirewall') ?> admin.php <?php esc_attr_e('or', 'ninjafirewall') ?> index.php,/blog" /> |
| 194 | <br /> |
| 195 | <p class="description"><?php esc_html_e('Full or partial case-sensitive REQUEST_URI string. Multiple values must be comma-separated.', 'ninjafirewall') ?></p> |
| 196 | </td> |
| 197 | </tr> |
| 198 | <tr> |
| 199 | <th scope="row" class="row-med"><?php esc_html_e('Format', 'ninjafirewall') ?></th> |
| 200 | <td> |
| 201 | <p><label><input type="radio" name="lf" value="0"<?php checked($lf, 0) ?> onclick="document.getElementById('liveformat').disabled=true"><code>[%time] %name %client "%method %uri" "%referrer" "%ua" "%forward" "%host"</code></label></p> |
| 202 | <p><label><input type="radio" name="lf" value="1"<?php checked($lf, 1) ?> onclick="document.getElementById('liveformat').disabled=false;document.getElementById('liveformat').focus()"><?php esc_html_e('Custom', 'ninjafirewall') ?> </label><input id="liveformat" type="text" class="regular-text" name="liveformat" value="<?php echo esc_attr( $liveformat ); ?>"<?php disabled($lf, 0) ?> autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /></p> |
| 203 | <p class="description"><?php esc_html_e('See contextual help for available log format.', 'ninjafirewall') ?></p> |
| 204 | </td> |
| 205 | </tr> |
| 206 | <tr> |
| 207 | <th scope="row" class="row-med"><?php esc_html_e('Display', 'ninjafirewall') ?></th> |
| 208 | <td> |
| 209 | <select name="liveport"> |
| 210 | <option value="0"<?php selected( $liveport, 0 ) ?>><?php esc_html_e('HTTP and HTTPS traffic (default)', 'ninjafirewall') ?></option> |
| 211 | <option value="1"<?php selected( $liveport, 1 ) ?>><?php esc_html_e('HTTP traffic only', 'ninjafirewall') ?></option> |
| 212 | <option value="2"<?php selected( $liveport, 2 ) ?>><?php esc_html_e('HTTPS traffic only', 'ninjafirewall') ?></option> |
| 213 | </select> |
| 214 | </td> |
| 215 | </tr> |
| 216 | <tr> |
| 217 | <th scope="row" class="row-med"><?php esc_html_e('Timezone', 'ninjafirewall') ?></th> |
| 218 | <td> |
| 219 | <select name="livetz"> |
| 220 | <?php |
| 221 | $timezone_choice = nfw_timezone_choice(); |
| 222 | foreach ($timezone_choice as $tz_place) { |
| 223 | echo '<option value ="' . esc_attr( $tz_place ) . '"'; |
| 224 | if ($livetz == $tz_place) { echo ' selected'; } |
| 225 | echo '>'. esc_html( $tz_place ) .'</option>'; |
| 226 | } |
| 227 | ?> |
| 228 | </select> |
| 229 | </td> |
| 230 | </tr> |
| 231 | </table> |
| 232 | <p><input type="submit" class="button-primary" value="<?php esc_html_e('Save Live Log Options', 'ninjafirewall') ?>" /></p> |
| 233 | <?php wp_nonce_field('livelog_save', 'nfwnonce', 0); ?> |
| 234 | <input type="hidden" name="tab" value="livelog" /> |
| 235 | </form> |
| 236 | <?php |
| 237 | |
| 238 | // --------------------------------------------------------------------- |
| 239 | function nf_sub_liveloge_save() { |
| 240 | |
| 241 | if ( empty($_POST['nfwnonce']) || |
| 242 | ! wp_verify_nonce($_POST['nfwnonce'], 'livelog_save') ) { |
| 243 | |
| 244 | wp_nonce_ays('livelog_save'); |
| 245 | } |
| 246 | |
| 247 | $nfw_options = nfw_get_option('nfw_options'); |
| 248 | |
| 249 | if ( empty( $_POST['liverules'] ) || |
| 250 | ! preg_match('/^[0-2]$/', $_POST['liverules']) ) { |
| 251 | |
| 252 | $nfw_options['liverules'] = 0; |
| 253 | } else { |
| 254 | $nfw_options['liverules'] = $_POST['liverules']; |
| 255 | } |
| 256 | |
| 257 | $nfw_options['liverulespath'] = ''; |
| 258 | if (! empty( $_POST['liverulespath'] ) ) { |
| 259 | $liverulespath = trim( $_POST['liverulespath'], " \t\n\r\0\x0B,"); |
| 260 | $nfw_options['liverulespath'] = preg_replace('/\s*,\s*/', ',', $liverulespath ); |
| 261 | } |
| 262 | if ( empty( $nfw_options['liverulespath'] ) ) { |
| 263 | $nfw_options['liverules'] = 0; |
| 264 | } |
| 265 | |
| 266 | if ( empty($_POST['lf']) ) { |
| 267 | $nfw_options['liveformat'] = ''; |
| 268 | } else { |
| 269 | if (! empty($_POST['liveformat']) ) { |
| 270 | $tmp = stripslashes($_POST['liveformat']); |
| 271 | // Remove unwanted characters : |
| 272 | $nfw_options['liveformat'] = preg_replace('`[^a-z%[\]"\x20]`', '', $tmp); |
| 273 | } |
| 274 | if (empty($_POST['liveformat']) ) { |
| 275 | return esc_html__('Error: please enter the custom log format.', 'ninjafirewall'); |
| 276 | } |
| 277 | } |
| 278 | |
| 279 | if ( empty($_POST['liveport']) || ! preg_match('/^[1-2]$/', $_POST['liveport']) ) { |
| 280 | $nfw_options['liveport'] = 0; |
| 281 | } else { |
| 282 | $nfw_options['liveport'] = $_POST['liveport']; |
| 283 | } |
| 284 | |
| 285 | if ( empty($_POST['livetz']) || preg_match('/[^\w\/]/', $_POST['livetz']) ) { |
| 286 | $nfw_options['livetz'] = 0; |
| 287 | } else { |
| 288 | $nfw_options['livetz'] = $_POST['livetz']; |
| 289 | } |
| 290 | |
| 291 | $nfw_options = nfw_update_option('nfw_options', $nfw_options); |
| 292 | } |
| 293 | |
| 294 | // --------------------------------------------------------------------- |
| 295 | |
| 296 | function nfw_timezone_choice() { |
| 297 | return array('UTC', 'Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap'); |
| 298 | } |
| 299 | |
| 300 | // --------------------------------------------------------------------- |
| 301 | // EOF |
| 302 |