Merge branch 'MDL-28509_master' of git://github.com/marxjohnson/moodle
authorAparup Banerjee <aparup@moodle.com>
Tue, 23 Aug 2011 06:07:08 +0000 (14:07 +0800)
committerAparup Banerjee <aparup@moodle.com>
Tue, 23 Aug 2011 06:07:08 +0000 (14:07 +0800)
213 files changed:
admin/blocks.php
admin/cli/install.php
admin/cli/install_database.php
admin/cron.php
admin/index.php
admin/settings/appearance.php
admin/settings/security.php
admin/settings/server.php
backup/moodle2/backup_stepslib.php
backup/moodle2/restore_stepslib.php
backup/util/helper/backup_cron_helper.class.php
blocks/rss_client/editfeed.php
calendar/preferences.php
calendar/view.php
cohort/edit.php
cohort/index.php
comment/lib.php
config-dist.php
course/edit.php
course/editcategory.php
course/format/topics/format.php
course/format/topics/lib.php
course/format/weeks/lib.php
filter/mediaplugin/lang/en/filter_mediaplugin.php
filter/mediaplugin/styles.css
grade/edit/outcome/edit.php
grade/edit/scale/edit.php
grade/import/csv/index.php
install.php
install/lang/bg/install.php
install/lang/bg/moodle.php
lang/en/admin.php
lang/en/moodle.org.php
lang/en/moodle.php
lang/en/question.php
lang/en/webservice.php
lib/adminlib.php
lib/blocklib.php
lib/datalib.php
lib/db/access.php
lib/db/install.xml
lib/db/upgrade.php
lib/dml/moodle_database.php
lib/dml/pgsql_native_moodle_database.php
lib/filebrowser/file_info_context_course.php
lib/filebrowser/file_info_context_module.php
lib/filelib.php
lib/formslib.php
lib/grade/grade_grade.php
lib/grouplib.php
lib/javascript-static.js
lib/moodlelib.php
lib/navigationlib.php
lib/outputrenderers.php
lib/pear/HTML/QuickForm.php
lib/pear/README_MOODLE.txt
lib/sessionlib.php
lib/simpletest/portfolio_testclass.php
lib/simpletest/testformslib.php [new file with mode: 0644]
lib/simpletest/testrepositorylib.php
lib/thirdpartylibs.xml
lib/timezone.txt
lib/upgradelib.php
lib/weblib.php
local/qeupgradehelper/afterupgradelib.php
message/lib.php
mod/assignment/lang/en/assignment.php
mod/assignment/lib.php
mod/assignment/simpletest/test_assignment_portfolio_callers.php
mod/assignment/type/online/assignment.class.php
mod/chat/chat_ajax.php
mod/chat/lib.php
mod/chat/simpletest/test_chat_portfolio_callers.php
mod/choice/lang/en/choice.php
mod/choice/mod_form.php
mod/choice/version.php
mod/data/simpletest/test_data_portfolio_callers.php
mod/feedback/item/label/lib.php
mod/forum/simpletest/test_forum_portfolio_callers.php
mod/glossary/simpletest/test_glossary_portfolio_callers.php
mod/lesson/editpage.php
mod/quiz/db/upgrade.php
mod/quiz/edit.php
mod/quiz/editlib.php
mod/quiz/lang/en/quiz.php
mod/quiz/lib.php
mod/quiz/locallib.php
mod/quiz/renderer.php
mod/quiz/report/overview/lang/en/quiz_overview.php
mod/quiz/report/overview/report.php
mod/quiz/report/statistics/report.php
mod/quiz/report/statistics/responseanalysis.php
mod/quiz/review.php
mod/quiz/styles.css
mod/scorm/api.php
mod/scorm/datamodels/debug.js.php
mod/scorm/datamodels/scorm_13.js.php
mod/scorm/datamodels/scormlib.php
mod/scorm/db/install.xml
mod/scorm/db/upgrade.php
mod/scorm/lang/en/scorm.php
mod/scorm/lib.php
mod/scorm/loadSCO.php
mod/scorm/loaddatamodel.php
mod/scorm/locallib.php
mod/scorm/mod_form.php
mod/scorm/module.js
mod/scorm/player.js
mod/scorm/player.php
mod/scorm/rd.js [deleted file]
mod/scorm/report/basic/report.php
mod/scorm/styles.css
mod/scorm/userreport.php
mod/scorm/version.php
mod/scorm/view.php
mod/survey/index.php
mod/survey/view.php
mod/wiki/lib.php
mod/wiki/pagelib.php
mod/wiki/view.php
mod/workshop/assessment.php
mod/workshop/exassessment.php
mod/workshop/excompare.php
mod/workshop/exsubmission.php
mod/workshop/form/accumulative/lib.php
mod/workshop/form/comments/lib.php
mod/workshop/form/numerrors/lib.php
mod/workshop/form/rubric/lib.php
mod/workshop/lang/en/workshop.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/renderer.php
mod/workshop/styles.css
mod/workshop/submission.php
mod/workshop/view.php
pix/i/completion-auto-enabled.gif [deleted file]
pix/i/completion-auto-enabled.png [new file with mode: 0644]
pix/i/completion-auto-fail.gif [deleted file]
pix/i/completion-auto-fail.png [new file with mode: 0644]
pix/i/completion-auto-n.gif [deleted file]
pix/i/completion-auto-n.png [new file with mode: 0644]
pix/i/completion-auto-pass.gif [deleted file]
pix/i/completion-auto-pass.png [new file with mode: 0644]
pix/i/completion-auto-y.gif [deleted file]
pix/i/completion-auto-y.png [new file with mode: 0644]
pix/i/completion-manual-enabled.gif [deleted file]
pix/i/completion-manual-enabled.png [new file with mode: 0644]
pix/i/completion-manual-n.gif [deleted file]
pix/i/completion-manual-n.png [new file with mode: 0644]
pix/i/completion-manual-y.gif [deleted file]
pix/i/completion-manual-y.png [new file with mode: 0644]
pix/i/flagged.png
pix/i/unflagged.png
portfolio/boxnet/simpletest/testportfoliopluginboxnet.php
question/edit.php
question/editlib.php
question/engine/lib.php
question/engine/renderer.php
question/flags.js
question/format.php
question/format/aiken/format.php
question/format/aiken/simpletest/fixtures/questions.aiken.txt [new file with mode: 0644]
question/format/gift/format.php
question/format/gift/simpletest/fixtures/questions.gift.txt [new file with mode: 0644]
question/format/gift/simpletest/testgiftformat.php
question/type/calculated/datasetdefinitions_form.php
question/type/calculated/datasetitems_form.php
question/type/calculated/db/upgradelib.php
question/type/calculated/lang/en/qtype_calculated.php
question/type/edit_question_form.php
question/type/match/questiontype.php
question/type/multianswer/edit_multianswer_form.php
question/type/multianswer/questiontype.php
question/type/multichoice/backup/moodle2/backup_qtype_multichoice_plugin.class.php
question/type/multichoice/questiontype.php
question/type/questionbase.php
question/type/questiontypebase.php
rating/lib.php
rating/simpletest/testrating.php [new file with mode: 0644]
repository/lib.php
repository/local/lib.php
repository/youtube/lib.php
tag/edit.php
theme/anomaly/style/general.css
theme/arialist/style/core.css
theme/base/pix/horizontal-menu-submenu-indicator.png [new file with mode: 0644]
theme/base/pix/vertical-menu-submenu-indicator.png [new file with mode: 0644]
theme/base/style/blocks.css
theme/base/style/core.css
theme/base/style/question.css
theme/binarius/style/core.css
theme/boxxie/style/core.css
theme/brick/style/core.css
theme/formal_white/style/formal_white.css
theme/formfactor/style/core.css
theme/formfactor/style/selected.css
theme/fusion/style/menus.css
theme/leatherbound/style/core.css
theme/magazine/style/core.css
theme/nimble/pix/horizontal-menu-submenu-indicator.png [new file with mode: 0644]
theme/nimble/pix/vertical-menu-submenu-indicator.png [new file with mode: 0644]
theme/nimble/style/colors.css
theme/nimble/style/menu.css
theme/nonzero/style/core.css
theme/sky_high/style/menu.css
theme/splash/style/sl.css
theme/standard/style/blocks.css
theme/yui_combo.php
user/edit.php
user/editadvanced.php
version.php
webservice/lib.php
webservice/soap/locallib.php

index 17b0350..55170d2 100644 (file)
@@ -12,6 +12,8 @@
     $hide     = optional_param('hide', 0, PARAM_INT);
     $show     = optional_param('show', 0, PARAM_INT);
     $delete   = optional_param('delete', 0, PARAM_INT);
+    $unprotect = optional_param('unprotect', 0, PARAM_INT);
+    $protect = optional_param('protect', 0, PARAM_INT);
 
 /// Print headings
 
@@ -24,6 +26,9 @@
     $strcourses = get_string('blockinstances', 'admin');
     $strname = get_string('name');
     $strshowblockcourse = get_string('showblockcourse');
+    $strprotecthdr = get_string('blockprotect', 'admin'). $OUTPUT->help_icon('blockprotect','admin');
+    $strprotect = get_string('blockprotect', 'admin');
+    $strunprotect = get_string('blockunprotect', 'admin');
 
 /// If data submitted, then process and store.
 
         admin_get_root(true, false);  // settings not required - only pages
     }
 
+    if (!isset($CFG->undeletableblocktypes) || (!is_array($CFG->undeletableblocktypes) && !is_string($CFG->undeletableblocktypes))) {
+        $undeletableblocktypes = array('navigation', 'settings');
+    } else if (is_string($CFG->undeletableblocktypes)) {
+        $undeletableblocktypes = explode(',', $CFG->undeletableblocktypes);
+    } else {
+        $undeletableblocktypes = $CFG->undeletableblocktypes;
+    }
+
+    if (!empty($protect) && confirm_sesskey()) {
+        if (!$block = $DB->get_record('block', array('id'=>$protect))) {
+            print_error('blockdoesnotexist', 'error');
+        }
+        if (!in_array($block->name, $undeletableblocktypes)) {
+            $undeletableblocktypes[] = $block->name;
+            set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
+        }
+        admin_get_root(true, false);  // settings not required - only pages
+    }
+
+    if (!empty($unprotect) && confirm_sesskey()) {
+        if (!$block = $DB->get_record('block', array('id'=>$unprotect))) {
+            print_error('blockdoesnotexist', 'error');
+        }
+        if (in_array($block->name, $undeletableblocktypes)) {
+            $undeletableblocktypes = array_diff($undeletableblocktypes, array($block->name));
+            set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
+        }
+        admin_get_root(true, false);  // settings not required - only pages
+    }
+
     if (!empty($delete) && confirm_sesskey()) {
         echo $OUTPUT->header();
         echo $OUTPUT->heading($strmanageblocks);
 
     $table = new flexible_table('admin-blocks-compatible');
 
-    $table->define_columns(array('name', 'instances', 'version', 'hideshow', 'delete', 'settings'));
-    $table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strdelete, $strsettings));
+    $table->define_columns(array('name', 'instances', 'version', 'hideshow', 'undeletable', 'delete', 'settings'));
+    $table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strprotecthdr, $strdelete, $strsettings));
     $table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
     $table->set_attribute('class', 'compatibleblockstable blockstable generaltable');
     $table->setup();
+    $tablerows = array();
 
     foreach ($blocks as $blockid=>$block) {
         $blockname = $block->name;
             $version = "$block->version ($plugin->version)";
         }
 
+        if (!$blockobject) {
+            // ignore
+            $undeletable = '';
+        } else if (in_array($blockname, $undeletableblocktypes)) {
+            $undeletable = '<a href="blocks.php?unprotect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strunprotect.'">'.
+                       '<img src="'.$OUTPUT->pix_url('t/unlock') . '" class="icon" alt="'.$strunprotect.'" /></a>';
+        } else {
+            $undeletable = '<a href="blocks.php?protect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strprotect.'">'.
+                       '<img src="'.$OUTPUT->pix_url('t/unlock_gray') . '" class="icon" alt="'.$strprotect.'" /></a>';
+        }
 
-        $table->add_data(array(
+        $row = array(
             '<span'.$class.'>'.$strblockname.'</span>',
             $blocklist,
             '<span'.$class.'>'.$version.'</span>',
             $visible,
+            $undeletable,
             $delete,
             $settings
-        ));
+        );
+        $tablerows[] = array(strip_tags($strblockname), $row); // first element will be used for sorting
+    }
+
+    textlib_get_instance()->asort($tablerows);
+    foreach ($tablerows as $row) {
+        $table->add_data($row[1]);
     }
 
     $table->print_html();
index 1c37f54..0dd5102 100644 (file)
@@ -115,12 +115,12 @@ if (function_exists('date_default_timezone_set') and function_exists('date_defau
 define('MOODLE_INTERNAL', true);
 
 // Check that PHP is of a sufficient version
-if (version_compare(phpversion(), "5.2.8") < 0) {
+if (version_compare(phpversion(), "5.3.2") < 0) {
     $phpversion = phpversion();
     // do NOT localise - lang strings would not work here and we CAN NOT move it after installib
-    echo "Sorry, Moodle 2.0 requires PHP 5.2.8 or later (currently using version $phpversion).\n";
-    echo "Please upgrade your server software or install latest Moodle 1.9.x instead.";
-    die;
+    fwrite(STDERR, "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).\n");
+    fwrite(STDERR, "Please upgrade your server software or install older Moodle version.\n");
+    exit(1);
 }
 
 // set up configuration
index ac58928..44412ec 100644 (file)
@@ -46,6 +46,8 @@ Options:
 --adminuser=USERNAME  Username for the moodle admin account. Default is admin.
 --adminpass=PASSWORD  Password for the moodle admin account.
 --agree-license       Indicates agreement with software license.
+--fullname            Name of the site
+--shortname           Name of the site
 -h, --help            Print out this help
 
 Example:
@@ -53,12 +55,12 @@ Example:
 ";
 
 // Check that PHP is of a sufficient version
-if (version_compare(phpversion(), "5.2.8") < 0) {
+if (version_compare(phpversion(), "5.3.2") < 0) {
     $phpversion = phpversion();
     // do NOT localise - lang strings would not work here and we CAN NOT move it after installib
-    fwrite(STDERR, "Sorry, Moodle 2.0 requires PHP 5.2.8 or later (currently using version $phpversion).\n");
-    fwrite(STDERR, "Please upgrade your server software or install latest Moodle 1.9.x instead.\n");
-    die(1);
+    fwrite(STDERR, "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).\n");
+    fwrite(STDERR, "Please upgrade your server software or install older Moodle version.\n");
+    exit(1);
 }
 
 // Nothing to do if config.php does not exist
@@ -66,7 +68,7 @@ $configfile = dirname(dirname(dirname(__FILE__))).'/config.php';
 if (!file_exists($configfile)) {
     fwrite(STDERR, 'config.php does not exist, can not continue'); // do not localize
     fwrite(STDERR, "\n");
-    die(1);
+    exit(1);
 }
 
 // Include necessary libs
@@ -93,6 +95,8 @@ list($options, $unrecognized) = cli_get_params(
         'lang'              => 'en',
         'adminuser'         => 'admin',
         'adminpass'         => '',
+        'fullname'          => '',
+        'shortname'         => '',
         'agree-license'     => false,
         'help'              => false
     ),
index e131e9b..5b473a3 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+
+if (defined('STDIN')) {
+    fwrite(STDERR, "ERROR: This script no longer supports CLI, please use admin/cli/cron.php instead\n");
+    exit(1);
+}
+
 // This is a fake CLI script, it is a really ugly hack which emulates
 // CLI via web interface, please do not use this hack elsewhere
 define('CLI_SCRIPT', true);
index 77c0404..2329248 100644 (file)
@@ -30,11 +30,23 @@ if (!file_exists('../config.php')) {
 }
 
 // Check that PHP is of a sufficient version as soon as possible
-if (version_compare(phpversion(), '5.2.0') < 0) {
+if (version_compare(phpversion(), '5.3.2') < 0) {
     $phpversion = phpversion();
     // do NOT localise - lang strings would not work here and we CAN NOT move it to later place
-    echo "Sorry, Moodle 2.0 requires PHP 5.2.8 or later (currently using version $phpversion). ";
-    echo "Please upgrade your server software or use latest Moodle 1.9.x instead.";
+    echo "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).<br />";
+    echo "Please upgrade your server software or install older Moodle version.";
+    die;
+}
+
+// make sure iconv is available and actually works
+if (!function_exists('iconv')) {
+    // this should not happen, this must be very borked install
+    echo 'Moodle requires the iconv PHP extension. Please install or enable the iconv extension.';
+    die();
+}
+if (iconv('UTF-8', 'UTF-8//IGNORE', 'abc') !== 'abc') {
+    // known to be broken in mid-2011 MAMP installations
+    echo 'Broken iconv PHP extension detected, installation/upgrade can not continue.';
     die;
 }
 
@@ -121,7 +133,7 @@ if (!core_tables_exist()) {
         echo $OUTPUT->box($copyrightnotice, 'copyrightnotice');
         echo '<br />';
         $continue = new single_button(new moodle_url('/admin/index.php', array('lang'=>$CFG->lang, 'agreelicense'=>1)), get_string('continue'), 'get');
-        echo $OUTPUT->confirm(get_string('doyouagree'), $continue, "http://docs.moodle.org/en/License");
+        echo $OUTPUT->confirm(get_string('doyouagree'), $continue, "http://docs.moodle.org/dev/License");
         echo $OUTPUT->footer();
         die;
     }
@@ -455,8 +467,8 @@ if (!empty($CFG->maintenance_enabled)) {
 $copyrighttext = '<a href="http://moodle.org/">Moodle</a> '.
                  '<a href="http://docs.moodle.org/dev/Releases" title="'.$CFG->version.'">'.$CFG->release.'</a><br />'.
                  'Copyright &copy; 1999 onwards, Martin Dougiamas<br />'.
-                 'and <a href="http://docs.moodle.org/en/Credits">many other contributors</a>.<br />'.
-                 '<a href="http://docs.moodle.org/en/License">GNU Public License</a>';
+                 'and <a href="http://docs.moodle.org/dev/Credits">many other contributors</a>.<br />'.
+                 '<a href="http://docs.moodle.org/dev/License">GNU Public License</a>';
 echo $OUTPUT->box($copyrighttext, 'copyright');
 //////////////////////////////////////////////////////////////////////////////////////////////////
 
index dc2ba27..6b251fb 100644 (file)
@@ -91,6 +91,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $temp->add(new admin_setting_configcheckbox('navshowcategories', get_string('navshowcategories', 'admin'), get_string('confignavshowcategories', 'admin'), 1));
     $temp->add(new admin_setting_configcheckbox('navshowallcourses', get_string('navshowallcourses', 'admin'), get_string('confignavshowallcourses', 'admin'), 0));
     $temp->add(new admin_setting_configtext('navcourselimit',get_string('navcourselimit','admin'),get_string('confignavcourselimit', 'admin'),20,PARAM_INT));
+    $temp->add(new admin_setting_configcheckbox('navlinkcoursesections', get_string('navlinkcoursesections', 'admin'), get_string('navlinkcoursesections_help', 'admin'), 0));
 
     $ADMIN->add('appearance', $temp);
 
index b2b264c..b72333c 100644 (file)
@@ -72,6 +72,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
     $temp->add(new admin_setting_configcheckbox('disableuserimages', get_string('disableuserimages', 'admin'), get_string('configdisableuserimages', 'admin'), 0));
     $temp->add(new admin_setting_configcheckbox('emailchangeconfirmation', get_string('emailchangeconfirmation', 'admin'), get_string('configemailchangeconfirmation', 'admin'), 1));
     $temp->add(new admin_setting_configselect('rememberusername', get_string('rememberusername','admin'), get_string('rememberusername_desc','admin'), 2, array(1=>get_string('yes'), 0=>get_string('no'), 2=>get_string('optional'))));
+    $temp->add(new admin_setting_configcheckbox('strictformsrequired', get_string('strictformsrequired', 'admin'), get_string('configstrictformsrequired', 'admin'), 0));
     $ADMIN->add('security', $temp);
 
 
index e8d7ea7..0348cd3 100644 (file)
@@ -48,8 +48,8 @@ $temp->add(new admin_setting_configselect('sessiontimeout', get_string('sessiont
                                                                                                                                                       900 => get_string('numminutes', '', 15),
                                                                                                                                                       300 => get_string('numminutes', '', 5))));
 $temp->add(new admin_setting_configtext('sessioncookie', get_string('sessioncookie', 'admin'), get_string('configsessioncookie', 'admin'), '', PARAM_ALPHANUM));
-$temp->add(new admin_setting_configtext('sessioncookiepath', get_string('sessioncookiepath', 'admin'), get_string('configsessioncookiepath', 'admin'), '/', PARAM_LOCALURL));
-$temp->add(new admin_setting_configtext('sessioncookiedomain', get_string('sessioncookiedomain', 'admin'), get_string('configsessioncookiedomain', 'admin'), '', PARAM_TEXT, 50));
+$temp->add(new admin_setting_configtext('sessioncookiepath', get_string('sessioncookiepath', 'admin'), get_string('configsessioncookiepath', 'admin'), '', PARAM_RAW));
+$temp->add(new admin_setting_configtext('sessioncookiedomain', get_string('sessioncookiedomain', 'admin'), get_string('configsessioncookiedomain', 'admin'), '', PARAM_RAW, 50));
 $ADMIN->add('server', $temp);
 
 
index ffc310e..d1b5d24 100644 (file)
@@ -319,8 +319,9 @@ class backup_module_structure_step extends backup_structure_step {
         // attach format plugin structure to $module element, only one allowed
         $this->add_plugin_structure('format', $module, false);
 
-        // attach plagiarism plugin structure to $module element, only one allowed
-        $this->add_plugin_structure('plagiarism', $module, false);
+        // attach plagiarism plugin structure to $module element, there can be potentially
+        // many plagiarism plugins storing information about this course
+        $this->add_plugin_structure('plagiarism', $module, true);
 
         // Define the tree
         $module->add_child($availinfo);
@@ -421,8 +422,9 @@ class backup_course_structure_step extends backup_structure_step {
         // course reports can save course data if required
         $this->add_plugin_structure('coursereport', $course, true);
 
-        // attach plagiarism plugin structure to $course element, only one allowed
-        $this->add_plugin_structure('plagiarism', $course, false);
+        // attach plagiarism plugin structure to $course element, there can be potentially
+        // many plagiarism plugins storing information about this course
+        $this->add_plugin_structure('plagiarism', $course, true);
 
         // Build the tree
 
index 643c478..0b02c01 100644 (file)
@@ -2637,6 +2637,12 @@ class restore_create_question_files extends restore_execution_step {
                                               $oldctxid, $this->task->get_userid(), 'question_answer', null, $newctxid, true);
             restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'hint',
                                               $oldctxid, $this->task->get_userid(), 'question_hint', null, $newctxid, true);
+            restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'correctfeedback',
+                                              $oldctxid, $this->task->get_userid(), 'question_created', $question->itemid, $newctxid, true);
+            restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'partiallycorrectfeedback',
+                                              $oldctxid, $this->task->get_userid(), 'question_created', $question->itemid, $newctxid, true);
+            restore_dbops::send_files_to_pool($this->get_basepath(), $this->get_restoreid(), 'question', 'incorrectfeedback',
+                                              $oldctxid, $this->task->get_userid(), 'question_created', $question->itemid, $newctxid, true);
             // Add qtype dependent files
             $components = backup_qtype_plugin::get_components_and_fileareas($question->qtype);
             foreach ($components as $component => $fileareas) {
index ea07094..be15523 100644 (file)
@@ -312,7 +312,7 @@ abstract class backup_cron_automated_helper {
 
             $settings = array(
                 'users' => 'backup_auto_users',
-                'role_assignments' => 'backup_auto_users',
+                'role_assignments' => 'backup_auto_role_assignments',
                 'user_files' => 'backup_auto_user_files',
                 'activities' => 'backup_auto_activities',
                 'blocks' => 'backup_auto_blocks',
index 38eeb48..5711917 100644 (file)
@@ -140,7 +140,9 @@ class feed_edit_form extends moodleform {
                 return $url;
             }
 
-            return $rss->subscribe_url();
+            // return URL without quoting..
+            $discoveredurl = new moodle_url($rss->subscribe_url());
+            return $discoveredurl->out(false);
     }
 }
 
index a36c9f3..165466d 100644 (file)
@@ -9,7 +9,7 @@ require_once($CFG->dirroot.'/calendar/preferences_form.php');
 $courseid = required_param('course', PARAM_INT);
 $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
 
-$PAGE->set_url('/calendar/preferences.php', array('id' => $courseid));
+$PAGE->set_url(new moodle_url('/calendar/preferences.php', array('course' => $courseid)));
 $PAGE->set_pagelayout('standard');
 
 require_login($course);
@@ -37,10 +37,13 @@ $prefs->maxevents  = get_user_preferences('calendar_maxevents', $defaultmaxevent
 $prefs->lookahead  = get_user_preferences('calendar_lookahead', $defaultlookahead);
 $prefs->persistflt = get_user_preferences('calendar_persistflt', 0);
 
-$form = new calendar_preferences_form();
+$form = new calendar_preferences_form($PAGE->url);
 $form->set_data($prefs);
 
-if ($data = $form->get_data() && confirm_sesskey()) {
+if ($form->is_cancelled()) {
+    redirect($viewurl);
+} else if ($form->is_submitted() && $form->is_validated() && confirm_sesskey()) {
+    $data = $form->get_data();
     if ($data->timeformat != CALENDAR_TF_12 && $data->timeformat != CALENDAR_TF_24) {
         $data->timeformat = '';
     }
@@ -68,7 +71,7 @@ if ($data = $form->get_data() && confirm_sesskey()) {
 $strcalendar = get_string('calendar', 'calendar');
 $strpreferences = get_string('calendarpreferences', 'calendar');
 
-$PAGE->navbar->add($strpreferences, new moodle_url('/calendar/view.php'));
+$PAGE->navbar->add($strpreferences);
 $PAGE->set_pagelayout('admin');
 $PAGE->set_title("$course->shortname: $strcalendar: $strpreferences");
 $PAGE->set_heading($course->fullname);
index 3b4c9b9..8f6b084 100644 (file)
@@ -151,7 +151,7 @@ if (!empty($CFG->enablecalendarexport)) {
     echo $OUTPUT->single_button(new moodle_url('export.php', array('course'=>$courseid)), get_string('exportcalendar', 'calendar'));
     if (isloggedin()) {
         $authtoken = sha1($USER->username . $USER->password . $CFG->calendar_exportsalt);
-        $link = new moodle_url('/calendar/export_execute.php', array('preset_what'=>'all', 'prest_time'=>'recentupcoming', 'username'=>$USER->username, 'authtoken'=>$authtoken));
+        $link = new moodle_url('/calendar/export_execute.php', array('preset_what'=>'all', 'preset_time'=>'recentupcoming', 'username'=>$USER->username, 'authtoken'=>$authtoken));
         $icon = html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('i/ical'), 'height'=>'14', 'width'=>'36', 'alt'=>get_string('ical', 'calendar'), 'title'=>get_string('quickdownloadcalendar', 'calendar')));
         echo html_writer::tag('a', $icon, array('href'=>$link));
     }
index 4063e9c..dc1bd08 100644 (file)
@@ -98,12 +98,12 @@ if ($delete and $cohort->id) {
 $editoroptions = array('maxfiles'=>0, 'context'=>$context);
 if ($cohort->id) {
     // edit existing
-    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions);
+    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions, $context);
     $strheading = get_string('editcohort', 'cohort');
 
 } else {
     // add new
-    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions);
+    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions, $context);
     $strheading = get_string('addcohort', 'cohort');
 }
 
index 0324c5a..62c4729 100644 (file)
@@ -47,6 +47,7 @@ if ($context->contextlevel == CONTEXT_COURSECAT) {
 }
 
 $manager = has_capability('moodle/cohort:manage', $context);
+$canassign = has_capability('moodle/cohort:assign', $context);
 if (!$manager) {
     require_capability('moodle/cohort:view', $context);
 }
@@ -84,18 +85,17 @@ foreach($cohorts as $cohort) {
         $line[] = get_string('pluginname', $cohort->component);
     }
 
-    if ($manager) {
-        if (empty($cohort->component)) {
-            $buttons = html_writer::link(new moodle_url('/cohort/edit.php', array('id'=>$cohort->id, 'delete'=>1)), html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('t/delete'), 'alt'=>get_string('delete'), 'class'=>'iconsmall')));
-            $buttons .= ' ' . html_writer::link(new moodle_url('/cohort/edit.php', array('id'=>$cohort->id)), html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('t/edit'), 'alt'=>get_string('edit'), 'class'=>'iconsmall')));
-            $buttons .= ' ' . html_writer::link(new moodle_url('/cohort/assign.php', array('id'=>$cohort->id)), html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('i/users'), 'alt'=>get_string('assign', 'core_cohort'), 'class'=>'iconsmall')));
-        } else {
-            $buttons = '';
+    $buttons = array();
+    if (empty($cohort->component)) {
+        if ($manager) {
+            $buttons[] = html_writer::link(new moodle_url('/cohort/edit.php', array('id'=>$cohort->id, 'delete'=>1)), html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('t/delete'), 'alt'=>get_string('delete'), 'class'=>'iconsmall')));
+            $buttons[] =  html_writer::link(new moodle_url('/cohort/edit.php', array('id'=>$cohort->id)), html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('t/edit'), 'alt'=>get_string('edit'), 'class'=>'iconsmall')));
+        }
+        if ($manager or $canassign) {
+            $buttons[] = html_writer::link(new moodle_url('/cohort/assign.php', array('id'=>$cohort->id)), html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('i/users'), 'alt'=>get_string('assign', 'core_cohort'), 'class'=>'iconsmall')));
         }
-    } else {
-        $buttons = '';
     }
-    $line[] = $buttons;
+    $line[] = implode(' ', $buttons);
 
     $data[] = $line;
 }
index 184e320..2d90ba7 100644 (file)
@@ -126,15 +126,6 @@ class comment {
      * @var int
      */
     protected $totalcommentcount = null;
-    /**
-     * When set to true any user to the system is able to view comments.
-     *
-     * This can be set to true by a plugin by implementing a allow_anonymous_access callback.
-     * By default it is false except on the front page.
-     *
-     * @var bool
-     */
-    protected $allowanonymousaccess = false;
 
     /**#@+
      * static variable will be used by non-js comments UI
@@ -240,18 +231,6 @@ class comment {
         $this->comment_param->commentarea = $this->commentarea;
         $this->comment_param->itemid      = $this->itemid;
 
-        $this->allowanonymousaccess = false;
-        // By default everyone can view comments on the front page
-        if ($this->context->contextlevel == CONTEXT_COURSE && $this->context->instanceid == SITEID) {
-            $this->allowanonymousaccess = true;
-        } else if ($this->context->contextlevel == CONTEXT_MODULE && $this->courseid == SITEID) {
-            $this->allowanonymousaccess = true;
-        }
-        if (!empty($this->plugintype) && !empty($this->pluginname)) {
-            // Plugins can override this if they wish.
-            $this->allowanonymousaccess = plugin_callback($this->plugintype, $this->pluginname, 'comment', 'allow_anonymous_access', array($this), $this->allowanonymousaccess);
-        }
-
         // setup notoggle
         if (!empty($options->notoggle)) {
             $this->set_notoggle($options->notoggle);
@@ -361,13 +340,8 @@ class comment {
         $this->viewcap = has_capability('moodle/comment:view', $this->context);
         if (!empty($this->plugintype)) {
             $permissions = plugin_callback($this->plugintype, $this->pluginname, 'comment', 'permissions', array($this->comment_param), array('post'=>false, 'view'=>false));
-            if ($this->allowanonymousaccess) {
-                $this->postcap = $permissions['post'];
-                $this->viewcap = $permissions['view'];
-            } else {
-                $this->postcap = $this->postcap && $permissions['post'];
-                $this->viewcap = $this->viewcap && $permissions['view'];
-            }
+            $this->postcap = $this->postcap && $permissions['post'];
+            $this->viewcap = $this->viewcap && $permissions['view'];
         }
     }
 
index 61c4e20..4ca2b72 100644 (file)
@@ -208,11 +208,6 @@ $CFG->admin = 'admin';
 // These blocks are used when no other default setting is found.
 //      $CFG->defaultblocks = 'participants,activity_modules,search_forums,admin,course_list:news_items,calendar_upcoming,recent_activity';
 //
-// The blocks in this list will be protected from deletion, and this is primarily
-// used to protect the navigation and settings blocks which can be very hard to
-// get back if accidentally delete.
-//      $CFG->undeletableblocktypes = 'navigation,settings';
-//
 // You can specify a different class to be created for the $PAGE global, and to
 // compute which blocks appear on each page. However, I cannot think of any good
 // reason why you would need to change that. It just felt wrong to hard-code the
index b487132..053d8bb 100644 (file)
@@ -77,9 +77,13 @@ if (!empty($course)) {
         }
     }
     $course->allowedmods = $allowedmods;
+    //add context for editor
+    $editoroptions['context'] = $coursecontext;
     $course = file_prepare_standard_editor($course, 'summary', $editoroptions, $coursecontext, 'course', 'summary', 0);
 
 } else {
+    //editor should respect category context if course context is not set.
+    $editoroptions['context'] = $catcontext;
     $course = file_prepare_standard_editor($course, 'summary', $editoroptions, null, 'course', 'summary', null);
 }
 
index 3cff561..ceffc63 100644 (file)
@@ -13,6 +13,8 @@ require_once('editcategory_form.php');
 require_login();
 
 $id = optional_param('id', 0, PARAM_INT);
+$itemid = 0; //initalise itemid, as all files in category description has item id 0
+
 if ($id) {
     if (!$category = $DB->get_record('course_categories', array('id' => $id))) {
         print_error('unknowcategory');
@@ -42,15 +44,21 @@ if ($id) {
     $category->parent = $parent;
     require_capability('moodle/category:manage', $context);
     $strtitle = get_string("addnewcategory");
-    $editorcontext = null;
+    $editorcontext = $context;
+    $itemid = null; //set this explicitly, so files for parent category should not get loaded in draft area.
     $title = "$SITE->shortname: ".get_string('addnewcategory');
     $fullname = $SITE->fullname;
 }
 
 $PAGE->set_pagelayout('admin');
 
-$editoroptions = array('maxfiles' => EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>true);
-$category = file_prepare_standard_editor($category, 'description', $editoroptions, $editorcontext, 'coursecat', 'description', 0);
+$editoroptions = array(
+    'maxfiles'  => EDITOR_UNLIMITED_FILES,
+    'maxbytes'  => $CFG->maxbytes,
+    'trusttext' => true,
+    'context'   => $editorcontext
+);
+$category = file_prepare_standard_editor($category, 'description', $editoroptions, $editorcontext, 'coursecat', 'description', $itemid);
 
 $mform = new editcategory_form('editcategory.php', compact('category', 'editoroptions'));
 $mform->set_data($category);
index aa1004f..d4a5f4e 100644 (file)
@@ -128,7 +128,6 @@ if ($thissection->summary or $thissection->sequence or $PAGE->user_is_editing())
 /// Now all the normal modules by topic
 /// Everything below uses "section" terminology - each "section" is a topic.
 
-$timenow = time();
 $section = 1;
 $sectionmenu = array();
 
index c80b518..9bd94d4 100644 (file)
@@ -90,3 +90,14 @@ function callback_topics_ajax_support() {
     $ajaxsupport->testedbrowsers = array('MSIE' => 6.0, 'Gecko' => 20061111, 'Safari' => 531, 'Chrome' => 6.0);
     return $ajaxsupport;
 }
+
+/**
+ * Returns a URL to arrive directly at a section
+ *
+ * @param int $courseid The id of the course to get the link for
+ * @param int $sectionnum The section number to jump to
+ * @return moodle_url
+ */
+function callback_topics_get_section_url($courseid, $sectionnum) {
+    return new moodle_url('/course/view.php', array('id' => $courseid, 'topic' => $sectionnum));
+}
\ No newline at end of file
index e37454f..34fd501 100644 (file)
@@ -112,3 +112,14 @@ function callback_weeks_ajax_support() {
     $ajaxsupport->testedbrowsers = array('MSIE' => 6.0, 'Gecko' => 20061111, 'Safari' => 531, 'Chrome' => 6.0);
     return $ajaxsupport;
 }
+
+/**
+ * Returns a URL to arrive directly at a section
+ *
+ * @param int $courseid The id of the course to get the link for
+ * @param int $sectionnum The section number to jump to
+ * @return moodle_url
+ */
+function callback_weeks_get_section_url($courseid, $sectionnum) {
+    return new moodle_url('/course/view.php', array('id' => $courseid, 'week' => $sectionnum));
+}
index de7e98e..94062fa 100644 (file)
@@ -28,7 +28,7 @@ $string['filtername'] = 'Multimedia plugins';
 $string['flashanimation'] = 'Flash animation';
 $string['flashanimation_help'] = 'Files with extension *.swf. For security reasons this filter is used only in trusted texts.';
 $string['flashvideo'] = 'Flash video';
-$string['flashvideo_help'] = 'Files with extension *.flv and *.f4v. Plays video clips using Flowplayer, requires Flash plugin and javascript. Uses HTML 5 video fallback if multiple sources psecified.';
+$string['flashvideo_help'] = 'Files with extension *.flv and *.f4v. Plays video clips using Flowplayer, requires Flash plugin and javascript. Uses HTML 5 video fallback if multiple sources specified.';
 $string['html5audio'] = 'HTML 5 audio';
 $string['html5audio_help'] = 'Audio files with extension *.ogg, *.aac and others. It is compatible with latest web browsers only, unfortunately there is no format that is supported by all browsers.
 Workaround is to specify fallbacks separated with # (ex: http://example.org/audio.aac#http://example.org/audio.aac#http://example.org/audio.mp3#), QuickTime player is used as a fallback for old browsers, fallback can be any audio type.';
index bb39c83..a1283ce 100644 (file)
@@ -11,4 +11,4 @@
  * see http://flowplayer.org/documentation/skinning/controlbar.html?skin=default for more color properties,
  * any property that ends with '...Color' is supported here.
  */
-.mp3flowplayer_backgroundColor {color: #000000};
+.mp3flowplayer_backgroundColor {color: #000000;}
index d301cfe..1f4d9b7 100644 (file)
@@ -103,7 +103,13 @@ if (!$courseid) {
 // default return url
 $gpr = new grade_plugin_return();
 $returnurl = $gpr->get_return_url('index.php?id='.$courseid);
-$editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false, 'noclean'=>true);
+$editoroptions = array(
+    'maxfiles'  => EDITOR_UNLIMITED_FILES,
+    'maxbytes'  => $CFG->maxbytes,
+    'trusttext' => false,
+    'noclean'   => true,
+    'context'   => $systemcontext
+);
 
 if (!empty($outcome_rec->id)) {
     $outcome_rec = file_prepare_standard_editor($outcome_rec, 'description', $editoroptions, $systemcontext, 'grade', 'outcome', $outcome_rec->id);
index 5787ed1..f226139 100644 (file)
@@ -88,7 +88,13 @@ if (!$courseid) {
 // default return url
 $gpr = new grade_plugin_return();
 $returnurl = $gpr->get_return_url('index.php?id='.$courseid);
-$editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false, 'noclean'=>true);
+$editoroptions = array(
+    'maxfiles'  => EDITOR_UNLIMITED_FILES,
+    'maxbytes'  => $CFG->maxbytes,
+    'trusttext' => false,
+    'noclean'   => true,
+    'context'   => $systemcontext
+);
 
 if (!empty($scale_rec->id)) {
     $scale_rec = file_prepare_standard_editor($scale_rec, 'description', $editoroptions, $systemcontext, 'grade', 'scale', $scale_rec->id);
index 8681a83..04844b0 100644 (file)
@@ -481,7 +481,7 @@ if ($formdata = $mform->get_data()) {
         fclose($fp);
         unlink($filename);
     } else {
-        print_error('cannotreadfil');
+        print_error('cannotreadfile');
     }
 
 } else {
index 3ff618b..eb7189f 100644 (file)
@@ -62,8 +62,20 @@ if (function_exists('date_default_timezone_set') and function_exists('date_defau
 if (version_compare(phpversion(), "5.2.0") < 0) {
     $phpversion = phpversion();
     // do NOT localise - lang strings would not work here and we CAN not move it after installib
-    echo "Sorry, Moodle 2.0 requires PHP 5.2.8 or later (currently using version $phpversion).<br />";
-    echo "Please upgrade your server software or install latest Moodle 1.9.x instead.";
+    echo "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).<br />";
+    echo "Please upgrade your server software or install older Moodle version.";
+    die;
+}
+
+// make sure iconv is available and actually works
+if (!function_exists('iconv')) {
+    // this should not happen, this must be very borked install
+    echo 'Moodle requires the iconv PHP extension. Please install or enable the iconv extension.';
+    die();
+}
+if (iconv('UTF-8', 'UTF-8//IGNORE', 'abc') !== 'abc') {
+    // known to be broken in mid-2011 MAMP installations
+    echo 'Broken iconv PHP extension detected, installation can not continue.';
     die;
 }
 
@@ -157,7 +169,7 @@ $CFG->admin                = $config->admin;
 $CFG->docroot              = 'http://docs.moodle.org';
 $CFG->langotherroot        = $CFG->dataroot.'/lang';
 $CFG->langlocalroot        = $CFG->dataroot.'/lang';
-$CFG->directorypermissions = 00777;
+$CFG->directorypermissions = isset($distro->directorypermissions) ? $distro->directorypermissions : 00777; // let distros set dir permissions
 $CFG->running_installer    = true;
 $CFG->early_install_lang   = true;
 
@@ -169,7 +181,7 @@ $memlimit = @ini_get('memory_limit');
 if (!empty($memlimit) and $memlimit != -1) {
     if (get_real_size($memlimit) < get_real_size($minrequiredmemory)) {
         // do NOT localise - lang strings would not work here and we CAN not move it to later place
-        echo "Sorry, Moodle 2.0 requires at least {$minrequiredmemory}B of PHP memory.<br />";
+        echo "Moodle requires at least {$minrequiredmemory}B of PHP memory.<br />";
         echo "Please contact server administrator to fix PHP.ini memory settings.";
         die;
     }
@@ -481,7 +493,7 @@ if ($config->stage == INSTALL_DATABASETYPE) {
 
 
 if ($config->stage == INSTALL_ENVIRONMENT or $config->stage == INSTALL_PATHS) {
-    $version_fail = (version_compare(phpversion(), "5.2.8") < 0);
+    $version_fail = (version_compare(phpversion(), "5.3.2") < 0);
     $curl_fail    = ($lang !== 'en' and !extension_loaded('curl')); // needed for lang pack download
     $zip_fail     = ($lang !== 'en' and !extension_loaded('zip'));  // needed for lang pack download
 
@@ -494,7 +506,7 @@ if ($config->stage == INSTALL_ENVIRONMENT or $config->stage == INSTALL_PATHS) {
 
         echo '<div id="envresult"><dl>';
         if ($version_fail) {
-            $a = (object)array('needed'=>'5.2.8', 'current'=>phpversion());
+            $a = (object)array('needed'=>'5.3.2', 'current'=>phpversion());
             echo '<dt>'.get_string('phpversion', 'install').'</dt><dd>'.get_string('environmentrequireversion', 'admin', $a).'</dd>';
         }
         if ($curl_fail) {
index 450193b..2ddf6cd 100644 (file)
 $string['availablelangs'] = 'Списък на наличните езици';
 $string['chooselanguagehead'] = 'Изберете език';
 $string['chooselanguagesub'] = 'Моля, изберете език за инсталацията. Този език ще бъде, също така, език по подразбиране на сайта, но може да бъде променен и по-късно след инсталирането.';
+$string['databasehost'] = 'Хост на базата данни';
+$string['databasename'] = 'Име на базата данни';
+$string['databasetypehead'] = 'Избиране на драйвер за база данни';
 $string['dataroot'] = 'Директория за данни';
+$string['dbprefix'] = 'Представка на таблиците';
 $string['dirroot'] = 'Директория на Moodle';
 $string['installation'] = 'Инсталиране';
 $string['paths'] = 'Пътища';
 $string['pathshead'] = 'Потвърждаване на пътищата';
 $string['pathssubdataroot'] = 'Тази директория е място, където Moodle, записва качваните файлове. Тази директория трябва да е достъпна за четене И ЗА ЗАПИС от потребителя на интернет сървъра (обикновено \'nobody\' или \'apache\'), но не трябва да е достъпна пряко през Интернет. Инталаторът ще се опита да създаде директорията, ако тя не съществува.';
 $string['pathssubdirroot'] = 'Пълен път до директорията на Moodle.';
-$string['pathssubwwwroot'] = 'Пълен интернет адрес, на който ще се отваря Moodle. Не е възможно Moodle да се отваря чрез различни адреси. Ако Вашият сайт има няколко адреса трябва на всеки от другите адреси да направите HTML пренасочване към този. Ако Вашият сайт се отваря както глобално от Интернет, така и от локална мрежа, настройте DNS така че потребителите от локалната мрежа също да могат да ползват глобалния адрес. Ако адресът не е коректен, моля, променете адреса в браузъра си и започнете инсталирането с правилния адрес.';
+$string['pathssubwwwroot'] = 'Пълен интернет адрес, на който ще се отваря Moodle. Не е възможно Moodle да се отваря чрез различни адреси. Ако Вашият сайт има няколко адреса трябва на всеки от другите адреси да направите пренасочване към този. Ако Вашият сайт се отваря както глобално от Интернет, така и от локална мрежа, настройте DNS, така че потребителите от локалната мрежа също да могат да ползват глобалния адрес. Ако адресът не е коректен, моля, променете адреса в браузъра си и започнете инсталирането с правилния адрес.';
 $string['wwwroot'] = 'Уеб адрес';
index ebc3c9c..33efcaa 100644 (file)
@@ -31,3 +31,4 @@
 $string['language'] = 'Език';
 $string['next'] = 'Следваща';
 $string['previous'] = 'Предишна';
+$string['reload'] = 'Презареждане';
index cec064f..77021d9 100644 (file)
@@ -72,6 +72,9 @@ $string['badwordslist'] = 'Custom bad words list';
 $string['blockediplist'] = 'Blocked IP List';
 $string['blockinstances'] = 'Instances';
 $string['blockmultiple'] = 'Multiple';
+$string['blockprotect'] = 'Protect from delete';
+$string['blockprotect_help'] = 'Selected block instances will be protected from deletion from the site-wide context. This is primarily used to protect the navigation and settings blocks which can be very hard to get back if accidentally deleted.';
+$string['blockunprotect'] = 'Unprotect';
 $string['blocksettings'] = 'Manage blocks';
 $string['bloglevel'] = 'Blog visibility';
 $string['bloglevelupgrade'] = 'Blog visibility upgrade';
@@ -330,6 +333,7 @@ $string['configstatsmaxruntime3'] = 'Specify the maximum time allowed to calcula
 $string['configstatsruntimedays'] = 'Specify the maximum number of days processed in each stats execution. When stats are up-to-date, only one day will be processed, so adjust this value depending of your server load, reducing it if shorter cron executions are needed.';
 $string['configstatsruntimestart'] = 'What time should the cronjob that does the stats processing <b>start</b>? Please specify different times if there are multiple Moodles on one physical server.';
 $string['configstatsuserthreshold'] = 'This setting specifies the minimum number of enrolled users for a course to be included in statistics calculations.';
+$string['configstrictformsrequired'] = 'If enabled, users are prevented from entering a space or line break only in required fields in forms.';
 $string['configstripalltitletags'] = 'Uncheck this setting to allow HTML tags in activity and resource names.';
 $string['configsupportemail'] = 'This email address will be published to users of this site as the one to email when they need general help (for example, when new users create their own accounts).  If this email is left blank then no such helpful email address is supplied.';
 $string['configsupportname'] = 'This is the name of a person or other entity offering general help via the support email or web address.';
@@ -728,6 +732,8 @@ $string['mysql416bypassed'] = 'However, if your site is using iso-8859-1 (latin)
 $string['mysql416required'] = 'MySQL 4.1.16 is the minimum version required for Moodle 1.6 in order to guarantee that all data can be converted to UTF-8 in the future.';
 $string['navigationupgrade'] = 'This upgrade introduces two new navigation blocks that will replace these blocks: Administration, Courses, Activities and Participants.  If you had set any special permissions on those blocks you should check to make sure everything is behaving as you want it.';
 $string['navcourselimit'] = 'Course limit';
+$string['navlinkcoursesections'] = 'Link course sections';
+$string['navlinkcoursesections_help'] = 'If enabled course sections will be shown as links within the navigation.';
 $string['navshowallcourses'] = 'Show all courses';
 $string['navshowcategories'] = 'Show course categories';
 $string['neverdeleteruns'] = 'Never delete runs';
@@ -958,6 +964,7 @@ $string['stickyblockscourseview'] = 'Course page';
 $string['stickyblocksduplicatenotice'] = 'If any block you add here is already present in a particular page, it will result in a duplicate.<br />Only the pinned block will be non-editable, the duplicate will still be editable.';
 $string['stickyblocksmymoodle'] = 'My Moodle';
 $string['stickyblockspagetype'] = 'Page type to configure';
+$string['strictformsrequired'] = 'Strict validation of required fields';
 $string['stripalltitletags'] = 'Remove HTML tags from all activity names';
 $string['supportcontact'] = 'Support contact';
 $string['supportemail'] = 'Support email';
index ab06c92..a5526ce 100644 (file)
@@ -76,7 +76,7 @@ $string['downloadcore'] = 'Our main method of distribution is via these standard
 $string['downloadcoretitle'] = 'Standard Moodle packages';
 $string['downloadcvs'] = 'Another way to get the core source code is by using CVS to connect directly to one of our mirrors of the code repository used by Moodle developers.  This makes upgrading very easy, even if you have made local changes to the source code.';
 $string['downloadcvstitle'] = 'Moodle via CVS';
-$string['downloadintro'] = 'Moodle is open source under the <a href="http://docs.moodle.org/en/License">GPL licence</a>.  Everything we produce is available for you to download and use for free.';
+$string['downloadintro'] = 'Moodle is open source under the <a href="http://docs.moodle.org/dev/License">GPL licence</a>.  Everything we produce is available for you to download and use for free.';
 $string['downloadlang'] = 'In current versions of Moodle, adding support for new languages has been automated from the administration menu within your site.  However, for some older versions of Moodle, new language packs need to be downloaded manually.';
 $string['downloadlangtitle'] = 'Language packs';
 $string['downloadlogotitle'] = 'Moodle logos';
index 50f5ebc..07bb2e9 100644 (file)
@@ -735,7 +735,7 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 See the Moodle License information page for full details:
-http://docs.moodle.org/en/License';
+http://docs.moodle.org/dev/License';
 $string['gpllicense'] = 'GPL license';
 $string['gpl3'] = 'Copyright (C) 1999 onwards Martin Dougiamas (http://moodle.com)
 
@@ -749,7 +749,7 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 See the Moodle License information page for full details:
-http://docs.moodle.org/en/License';
+http://docs.moodle.org/dev/License';
 $string['grade'] = 'Grade';
 $string['grades'] = 'Grades';
 $string['group'] = 'Group';
index 13e17ec..7b73533 100644 (file)
@@ -54,6 +54,7 @@ $string['cannotloadquestion'] = 'Could not load question';
 $string['cannotmovequestion'] = 'You can\'t use this script to move questions that have files associated with them from different areas.';
 $string['cannotopenforwriting'] = 'Cannot open for writing: {$a}';
 $string['cannotpreview'] = 'You can\'t preview these questions!';
+$string['cannotread'] = 'Cannot read import file (or file is empty)';
 $string['cannotretrieveqcat'] = 'Could not retrieve question category';
 $string['cannotunhidequestion'] = 'Failed to unhide the question.';
 $string['cannotunzip'] = 'Could not unzip file.';
@@ -65,8 +66,10 @@ $string['categoryinfo'] = 'Category info';
 $string['categorymove'] = 'The category \'{$a->name}\' contains {$a->count} questions (some of them may be old, hidden, questions that are still in use in some existing quizzes). Please choose another category to move them to.';
 $string['categorymoveto'] = 'Save in category';
 $string['categorynamecantbeblank'] = 'The category name cannot be blank.';
-$string['clicktoflag'] = 'Click to flag this question';
-$string['clicktounflag'] = 'Click to un-flag this question';
+$string['clickflag'] = 'Flag question';
+$string['clicktoflag'] = 'Flag this question for future reference';
+$string['clicktounflag'] = 'Remove flag';
+$string['clickunflag'] = 'Remove flag';
 $string['contexterror'] = 'You shouldn\'t have got here if you\'re not moving a category to another context.';
 $string['copy'] = 'Copy from {$a} and change links.';
 $string['created'] = 'Created';
@@ -298,8 +301,6 @@ $string['category'] = 'Category';
 $string['changeoptions'] = 'Change options';
 $string['check'] = 'Check';
 $string['clearwrongparts'] = 'Clear incorrect responses';
-$string['clicktoflag'] = 'Click to flag this question';
-$string['clicktounflag'] = 'Click to un-flag this question';
 $string['closepreview'] = 'Close preview';
 $string['combinedfeedback'] = 'Combined feedback';
 $string['commented'] = 'Commented: {$a}';
index 5d0690e..dec65ad 100644 (file)
@@ -67,6 +67,7 @@ $string['editservice'] = 'Edit the service: {$a->name} (id: {$a->id})';
 $string['enabled'] = 'Enabled';
 $string['enabledocumentation'] = 'Enable developer documentation';
 $string['enabledocumentationdescription'] = 'Detailed web services documentation is available for enabled protocols.';
+$string['enablemobilewsoverview'] = 'Go to {$a->manageservicelink} administration page, check the "{$a->enablemobileservice}" setting and Save. Everything will be setup for you and all site\'s users will be able to use the offical Moodle app. Current status: {$a->wsmobilestatus}';
 $string['enableprotocols'] = 'Enable protocols';
 $string['enableprotocolsdescription'] = 'At least one protocol should be enabled. For security reasons, only protocols that are to be used should be enabled.';
 $string['enablews'] = 'Enable web services';
@@ -120,6 +121,8 @@ $string['missingcaps_help'] = 'List of required capabilities for the service whi
 $string['missingpassword'] = 'Missing password';
 $string['missingusername'] = 'Missing username';
 $string['missingversionfile'] = 'Coding error: version.php file is missing for the component {$a}';
+$string['mobilewsdisabled'] = 'Disabled';
+$string['mobilewsenabled'] = 'Enabled';
 $string['nofunctions'] = 'This service has no functions.';
 $string['norequiredcapability'] = 'No required capability';
 $string['notoken'] = 'The token list is empty.';
index cf21bcf..8e0a55c 100644 (file)
@@ -6259,7 +6259,7 @@ function db_replace($search, $replace) {
     // TODO: this is horrible hack, we should do whitelisting and each plugin should be responsible for proper replacing...
     $skiptables = array('config', 'config_plugins', 'config_log', 'upgrade_log',
                         'filter_config', 'sessions', 'events_queue', 'repository_instance_config',
-                        'block_instances', 'block_pinned_old', 'block_instance_old', '');
+                        'block_instances', '');
 
     // Turn off time limits, sometimes upgrades can be slow.
     @set_time_limit(0);
@@ -7059,10 +7059,25 @@ class admin_setting_webservicesoverview extends admin_setting {
         global $CFG, $OUTPUT;
 
         $return = "";
-
-        /// One system controlling Moodle with Token
         $brtag = html_writer::empty_tag('br');
 
+        // Enable mobile web service
+        $enablemobile = new admin_setting_enablemobileservice('enablemobilewebservice',
+                get_string('enablemobilewebservice', 'admin'),
+                get_string('configenablemobilewebservice',
+                        'admin', ''), 0); //we don't want to display it but to know the ws mobile status
+        $manageserviceurl = new moodle_url("/admin/settings.php?section=externalservices");
+        $wsmobileparam = new stdClass();
+        $wsmobileparam->enablemobileservice = get_string('enablemobilewebservice', 'admin');
+        $wsmobileparam->manageservicelink = html_writer::link($manageserviceurl,
+                get_string('externalservices', 'webservice'));
+        $mobilestatus = $enablemobile->get_setting()?get_string('mobilewsenabled', 'webservice'):get_string('mobilewsdisabled', 'webservice');
+        $wsmobileparam->wsmobilestatus = html_writer::tag('strong', $mobilestatus);
+        $return .= $OUTPUT->heading(get_string('enablemobilewebservice', 'admin'), 3, 'main');
+        $return .= $brtag . get_string('enablemobilewsoverview', 'webservice', $wsmobileparam)
+                . $brtag . $brtag;
+
+        /// One system controlling Moodle with Token
         $return .= $OUTPUT->heading(get_string('onesystemcontrolling', 'webservice'), 3, 'main');
         $table = new html_table();
         $table->head = array(get_string('step', 'webservice'), get_string('status'),
index 4c816c2..86fd35d 100644 (file)
@@ -997,26 +997,36 @@ class block_manager {
         global $CFG;
 
         if (!isset($CFG->undeletableblocktypes) || (!is_array($CFG->undeletableblocktypes) && !is_string($CFG->undeletableblocktypes))) {
-            $CFG->undeletableblocktypes = array('navigation','settings');
+            $undeletableblocktypes = array('navigation','settings');
         } else if (is_string($CFG->undeletableblocktypes)) {
-            $CFG->undeletableblocktypes = explode(',', $CFG->undeletableblocktypes);
+            $undeletableblocktypes = explode(',', $CFG->undeletableblocktypes);
+        } else {
+            $undeletableblocktypes = $CFG->undeletableblocktypes;
         }
 
         $controls = array();
         $actionurl = $this->page->url->out(false, array('sesskey'=> sesskey()));
 
-        // Assign roles icon.
-        if (has_capability('moodle/role:assign', $block->context)) {
-            //TODO: please note it is sloppy to pass urls through page parameters!!
-            //      it is shortened because some web servers (e.g. IIS by default) give
-            //      a 'security' error if you try to pass a full URL as a GET parameter in another URL.
+        if ($this->page->user_can_edit_blocks()) {
+            // Move icon.
+            $controls[] = array('url' => $actionurl . '&bui_moveid=' . $block->instance->id,
+                    'icon' => 't/move', 'caption' => get_string('move'));
+        }
 
-            $return = $this->page->url->out(false);
-            $return = str_replace($CFG->wwwroot . '/', '', $return);
+        if ($this->page->user_can_edit_blocks() || $block->user_can_edit()) {
+            // Edit config icon - always show - needed for positioning UI.
+            $controls[] = array('url' => $actionurl . '&bui_editid=' . $block->instance->id,
+                    'icon' => 't/edit', 'caption' => get_string('configuration'));
+        }
 
-            $controls[] = array('url' => $CFG->wwwroot . '/' . $CFG->admin .
-                    '/roles/assign.php?contextid=' . $block->context->id . '&returnurl=' . urlencode($return),
-                    'icon' => 'i/roles', 'caption' => get_string('assignroles', 'role'));
+        if ($this->page->user_can_edit_blocks() && $block->user_can_edit() && $block->user_can_addto($this->page)) {
+            if (!in_array($block->instance->blockname, $undeletableblocktypes)
+                    || !in_array($block->instance->pagetypepattern, array('*', 'site-index'))
+                    || $block->instance->parentcontextid != SITEID) {
+                // Delete icon.
+                $controls[] = array('url' => $actionurl . '&bui_deleteid=' . $block->instance->id,
+                        'icon' => 't/delete', 'caption' => get_string('delete'));
+            }
         }
 
         if ($this->page->user_can_edit_blocks() && $block->instance_can_be_hidden()) {
@@ -1030,24 +1040,17 @@ class block_manager {
             }
         }
 
-        if ($this->page->user_can_edit_blocks() || $block->user_can_edit()) {
-            // Edit config icon - always show - needed for positioning UI.
-            $controls[] = array('url' => $actionurl . '&bui_editid=' . $block->instance->id,
-                    'icon' => 't/edit', 'caption' => get_string('configuration'));
-        }
-
-        if ($this->page->user_can_edit_blocks() && $block->user_can_edit() && $block->user_can_addto($this->page)) {
-            if (!in_array($block->instance->blockname, $CFG->undeletableblocktypes)) {
-                // Delete icon.
-                $controls[] = array('url' => $actionurl . '&bui_deleteid=' . $block->instance->id,
-                        'icon' => 't/delete', 'caption' => get_string('delete'));
-            }
-        }
+        // Assign roles icon.
+        if (has_capability('moodle/role:assign', $block->context)) {
+            //TODO: please note it is sloppy to pass urls through page parameters!!
+            //      it is shortened because some web servers (e.g. IIS by default) give
+            //      a 'security' error if you try to pass a full URL as a GET parameter in another URL.
+            $return = $this->page->url->out(false);
+            $return = str_replace($CFG->wwwroot . '/', '', $return);
 
-        if ($this->page->user_can_edit_blocks()) {
-            // Move icon.
-            $controls[] = array('url' => $actionurl . '&bui_moveid=' . $block->instance->id,
-                    'icon' => 't/move', 'caption' => get_string('move'));
+            $controls[] = array('url' => $CFG->wwwroot . '/' . $CFG->admin .
+                    '/roles/assign.php?contextid=' . $block->context->id . '&returnurl=' . urlencode($return),
+                    'icon' => 'i/roles', 'caption' => get_string('assignroles', 'role'));
         }
 
         return $controls;
index 8aa1f84..478156c 100644 (file)
@@ -847,7 +847,7 @@ function get_categories($parent='none', $sort=NULL, $shallow=true) {
                   FROM {course_categories} cc
                $ccjoin
                   JOIN {course_categories} ccp
-                       ON (cc.path LIKE ".$DB->sql_concat('ccp.path',"'%'").")
+                       ON ((cc.parent = ccp.id) OR (cc.path LIKE ".$DB->sql_concat('ccp.path',"'/%'")."))
                  WHERE ccp.id=?
                 $sort";
         $params = array($parent);
index c9f0ee2..bc42449 100644 (file)
@@ -1641,10 +1641,11 @@ $capabilities = array(
         )
     ),
     'moodle/comment:view' => array(
-
         'captype' => 'read',
         'contextlevel' => CONTEXT_COURSE,
         'archetypes' => array(
+            'frontpage' => CAP_ALLOW,
+            'guest' => CAP_ALLOW,
             'user' => CAP_ALLOW,
             'student' => CAP_ALLOW,
             'teacher' => CAP_ALLOW,
index 407c6f9..f72b59b 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="lib/db" VERSION="20110627" COMMENT="XMLDB file for core Moodle tables"
+<XMLDB PATH="lib/db" VERSION="20110821" COMMENT="XMLDB file for core Moodle tables"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
 >
         <INDEX NAME="parentcontextid-showinsubcontexts-pagetypepattern-subpagepattern" UNIQUE="false" FIELDS="parentcontextid, showinsubcontexts, pagetypepattern, subpagepattern"/>
       </INDEXES>
     </TABLE>
-    <TABLE NAME="block_positions" COMMENT="Stores the position of a sticky block_instance on a another page than the one where it was added." PREVIOUS="block_instances" NEXT="block_pinned_old">
+    <TABLE NAME="block_positions" COMMENT="Stores the position of a sticky block_instance on a another page than the one where it was added." PREVIOUS="block_instances" NEXT="comments">
       <FIELDS>
         <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="blockinstanceid"/>
         <FIELD NAME="blockinstanceid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" COMMENT="The block_instance this position relates to." PREVIOUS="id" NEXT="contextid"/>
         <INDEX NAME="blockinstanceid-contextid-pagetype-subpage" UNIQUE="true" FIELDS="blockinstanceid, contextid, pagetype, subpage"/>
       </INDEXES>
     </TABLE>
-    <TABLE NAME="block_pinned_old" COMMENT="backup of 1.9 pinned blocks - to be deleted" PREVIOUS="block_positions" NEXT="block_instance_old">
-      <FIELDS>
-        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="blockid"/>
-        <FIELD NAME="blockid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="id" NEXT="pagetype"/>
-        <FIELD NAME="pagetype" TYPE="char" LENGTH="20" NOTNULL="true" SEQUENCE="false" PREVIOUS="blockid" NEXT="position"/>
-        <FIELD NAME="position" TYPE="char" LENGTH="10" NOTNULL="true" SEQUENCE="false" PREVIOUS="pagetype" NEXT="weight"/>
-        <FIELD NAME="weight" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" PREVIOUS="position" NEXT="visible"/>
-        <FIELD NAME="visible" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" PREVIOUS="weight" NEXT="configdata"/>
-        <FIELD NAME="configdata" TYPE="text" LENGTH="small" NOTNULL="true" SEQUENCE="false" PREVIOUS="visible"/>
-      </FIELDS>
-      <KEYS>
-        <KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="blockid"/>
-        <KEY NAME="blockid" TYPE="foreign" FIELDS="blockid" REFTABLE="block" REFFIELDS="id" PREVIOUS="primary"/>
-      </KEYS>
-      <INDEXES>
-        <INDEX NAME="pagetype" UNIQUE="false" FIELDS="pagetype"/>
-      </INDEXES>
-    </TABLE>
-    <TABLE NAME="block_instance_old" COMMENT="backup of 1.9 block instances - to be deleted" PREVIOUS="block_pinned_old" NEXT="comments">
-      <FIELDS>
-        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="oldid"/>
-        <FIELD NAME="oldid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" PREVIOUS="id" NEXT="blockid"/>
-        <FIELD NAME="blockid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="oldid" NEXT="pageid"/>
-        <FIELD NAME="pageid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="blockid" NEXT="pagetype"/>
-        <FIELD NAME="pagetype" TYPE="char" LENGTH="20" NOTNULL="true" SEQUENCE="false" PREVIOUS="pageid" NEXT="position"/>
-        <FIELD NAME="position" TYPE="char" LENGTH="10" NOTNULL="true" SEQUENCE="false" PREVIOUS="pagetype" NEXT="weight"/>
-        <FIELD NAME="weight" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" PREVIOUS="position" NEXT="visible"/>
-        <FIELD NAME="visible" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" PREVIOUS="weight" NEXT="configdata"/>
-        <FIELD NAME="configdata" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" PREVIOUS="visible"/>
-      </FIELDS>
-      <KEYS>
-        <KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="blockid"/>
-        <KEY NAME="blockid" TYPE="foreign" FIELDS="blockid" REFTABLE="block" REFFIELDS="id" PREVIOUS="primary"/>
-      </KEYS>
-      <INDEXES>
-        <INDEX NAME="pageid" UNIQUE="false" FIELDS="pageid" NEXT="pagetype"/>
-        <INDEX NAME="pagetype" UNIQUE="false" FIELDS="pagetype" PREVIOUS="pageid"/>
-      </INDEXES>
-    </TABLE>
-    <TABLE NAME="comments" COMMENT="moodle comments module" PREVIOUS="block_instance_old" NEXT="external_services">
+    <TABLE NAME="comments" COMMENT="moodle comments module" PREVIOUS="block_positions" NEXT="external_services">
       <FIELDS>
         <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="contextid"/>
         <FIELD NAME="contextid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" PREVIOUS="id" NEXT="commentarea"/>
index 1935084..742faa8 100644 (file)
@@ -2121,7 +2121,7 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
                 $instanceids[] = $blockinstance->id;
                 // If we have more than 1000 block instances now remove all block positions
                 // and empty the array
-                if (count($contextids) > 1000) {
+                if (count($instanceids) > 1000) {
                     $instanceidstring = join(',',$instanceids);
                     $DB->delete_records_select('block_positions', 'blockinstanceid IN ('.$instanceidstring.')');
                     $instanceids = array();
@@ -2131,8 +2131,10 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
 
         upgrade_cleanup_unwanted_block_contexts($contextids);
 
-        $instanceidstring = join(',',$instanceids);
-        $DB->delete_records_select('block_positions', 'blockinstanceid IN ('.$instanceidstring.')');
+        if ($instanceids) {
+            $instanceidstring = join(',',$instanceids);
+            $DB->delete_records_select('block_positions', 'blockinstanceid IN ('.$instanceidstring.')');
+        }
 
         unset($allblockinstances);
         unset($contextids);
@@ -6649,12 +6651,33 @@ FROM
         upgrade_main_savepoint(true, 2011071300.01);
     }
 
+    if ($oldversion < 2011081700.01) {
+        // Remove category_sortorder index that was supposed to be removed long time ago
+        $table = new xmldb_table('course');
+        $index = new xmldb_index('category_sortorder', XMLDB_INDEX_UNIQUE, array('category', 'sortorder'));
+
+        if ($dbman->index_exists($table, $index)) {
+            $dbman->drop_index($table, $index);
+        }
+        upgrade_main_savepoint(true, 2011081700.01);
+    }
+
+    if ($oldversion < 2011081700.02) {
+        // remove safety block backup from 2.0 upgrade
+        $table = new xmldb_table('block_pinned_old');
+        if ($dbman->table_exists($table)) {
+            $dbman->drop_table($table);
+        }
+        $table = new xmldb_table('block_instance_old');
+        if ($dbman->table_exists($table)) {
+            $dbman->drop_table($table);
+        }
+        upgrade_main_savepoint(true, 2011081700.02);
+    }
+
 
     return true;
 }
 
-//TODO: Cleanup before the 2.0 release - we do not want to drag along these dev machine fixes forever
-// 1/ drop block_pinned_old table here and in install.xml
-// 2/ drop block_instance_old table here and in install.xml
 
 //TODO: AFTER 2.0 remove the column user->emailstop and the user preference "message_showmessagewindow"
index 83885c3..db88a9e 100644 (file)
@@ -502,19 +502,24 @@ abstract class moodle_database {
         $where = array();
         $params = array();
 
-        $columns = $this->get_columns($table);
-        foreach ($conditions as $key=>$value) {
-            if (!isset($columns[$key])) {
-                $a = new stdClass();
-                $a->fieldname = $key;
-                $a->tablename = $table;
-                throw new dml_exception('ddlfieldnotexist', $a);
-            }
-            $column = $columns[$key];
-            if ($column->meta_type == 'X') {
-                //ok so the column is a text column. sorry no text columns in the where clause conditions
-                throw new dml_exception('textconditionsnotallowed', $conditions);
+        if (debugging()) {
+            $columns = $this->get_columns($table);
+            foreach ($conditions as $key=>$value) {
+                if (!isset($columns[$key])) {
+                    $a = new stdClass();
+                    $a->fieldname = $key;
+                    $a->tablename = $table;
+                    throw new dml_exception('ddlfieldnotexist', $a);
+                }
+                $column = $columns[$key];
+                if ($column->meta_type == 'X') {
+                    //ok so the column is a text column. sorry no text columns in the where clause conditions
+                    throw new dml_exception('textconditionsnotallowed', $conditions);
+                }
             }
+        }
+
+        foreach ($conditions as $key=>$value) {
             if (is_int($key)) {
                 throw new dml_exception('invalidnumkey');
             }
index 4f82eda..9fa697f 100644 (file)
@@ -277,12 +277,12 @@ class pgsql_native_moodle_database extends moodle_database {
             return $this->tables;
         }
         $this->tables = array();
-        $prefix = str_replace('_', '\\\\_', $this->prefix);
+        $prefix = str_replace('_', '|_', $this->prefix);
         // Get them from information_schema instead of catalog as far as
         // we want to get only own session temp objects (catalog returns all)
         $sql = "SELECT table_name
                   FROM information_schema.tables
-                 WHERE table_name LIKE '$prefix%'
+                 WHERE table_name LIKE '$prefix%' ESCAPE '|'
                    AND table_type IN ('BASE TABLE', 'LOCAL TEMPORARY')";
         $this->query_start($sql, null, SQL_QUERY_AUX);
         $result = pg_query($this->pgsql, $sql);
index df8b0c4..14f5283 100644 (file)
@@ -53,10 +53,20 @@ class file_info_context_course extends file_info {
      * @param $filename
      */
     public function get_file_info($component, $filearea, $itemid, $filepath, $filename) {
+        // try to emulate require_login() tests here
+        if (!isloggedin()) {
+            return null;
+        }
+
         if (!$this->course->visible and !has_capability('moodle/course:viewhiddencourses', $this->context)) {
             return null;
         }
 
+        if (!is_viewing($this->context) and !is_enrolled($this->context)) {
+            // no peaking here if not enrolled or inspector
+            return null;
+        }
+
         if (empty($component)) {
             return $this;
         }
index e72e315..a8149c6 100644 (file)
@@ -75,11 +75,28 @@ class file_info_context_module extends file_info {
      * @param $filename
      */
     public function get_file_info($component, $filearea, $itemid, $filepath, $filename) {
-        if (!is_enrolled($this->context) and !is_viewing($this->context)) {
+        // try to emulate require_login() tests here
+        if (!isloggedin()) {
+            return null;
+        }
+
+        $coursecontext = get_course_context($this->context);
+        if (!$this->course->visible and !has_capability('moodle/course:viewhiddencourses', $coursecontext)) {
+            return null;
+        }
+
+        if (!is_viewing($this->context) and !is_enrolled($this->context)) {
             // no peaking here if not enrolled or inspector
             return null;
         }
 
+        $modinfo = get_fast_modinfo($this->course);
+        $cminfo = $modinfo->get_cm($this->cm->id);
+        if (!$cminfo->uservisible) {
+            // activity hidden sorry
+            return null;
+        }
+
         if (empty($component)) {
             return $this;
         }
index 7d8830b..5cc33d0 100644 (file)
@@ -111,6 +111,20 @@ function file_prepare_standard_editor($data, $field, array $options, $context=nu
         $options['noclean'] = false;
     }
 
+    //sanity check for passed context. This function doesn't expect $option['context'] to be set
+    //But this function is called before creating editor hence, this is one of the best places to check
+    //if context is used properly. This check notify developer that they missed passing context to editor.
+    if (isset($context) && !isset($options['context'])) {
+        //if $context is not null then make sure $option['context'] is also set.
+        debugging('Context for editor is not set in editoroptions. Hence editor will not respect editor filters', DEBUG_DEVELOPER);
+    } else if (isset($options['context']) && isset($context)) {
+        //If both are passed then they should be equal.
+        if ($options['context']->id != $context->id) {
+            $exceptionmsg = 'Editor context ['.$options['context']->id.'] is not equal to passed context ['.$context->id.']';
+            throw new coding_exception($exceptionmsg);
+        }
+    }
+
     if (is_null($itemid) or is_null($context)) {
         $contextid = null;
         $itemid = null;
index fbc6a50..b829205 100644 (file)
@@ -43,6 +43,7 @@ defined('MOODLE_INTERNAL') || die();
 require_once 'HTML/QuickForm.php';
 require_once 'HTML/QuickForm/DHTMLRulesTableless.php';
 require_once 'HTML/QuickForm/Renderer/Tableless.php';
+require_once 'HTML/QuickForm/Rule.php';
 
 require_once $CFG->libdir.'/filelib.php';
 
@@ -992,15 +993,6 @@ abstract class moodleform {
         $mform->setType("checkbox_controller$groupid", PARAM_INT);
         $mform->setConstants(array("checkbox_controller$groupid" => $new_select_value));
 
-        // Locate all checkboxes for this group and set their value, IF the optional param was given
-        if (!is_null($select_value)) {
-            foreach ($this->_form->_elements as $element) {
-                if ($element->getAttribute('class') == "checkboxgroup$groupid") {
-                    $mform->setConstants(array($element->getAttribute('name') => $select_value));
-                }
-            }
-        }
-
         $checkbox_controller_name = 'nosubmit_checkbox_controller' . $groupid;
         $mform->registerNoSubmitButton($checkbox_controller_name);
 
@@ -1009,7 +1001,7 @@ abstract class moodleform {
         if (!defined('HTML_QUICKFORM_CHECKBOXCONTROLLER_EXISTS')) {
             $js .= <<<EOS
 function html_quickform_toggle_checkboxes(group) {
-    var checkboxes = getElementsByClassName(document, 'input', 'checkboxgroup' + group);
+    var checkboxes = document.getElementsByClassName('checkboxgroup' + group);
     var newvalue = false;
     var global = eval('html_quickform_checkboxgroup' + group + ';');
     if (global == 1) {
@@ -1575,6 +1567,10 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
             }
         }
 
+        if (is_array($this->_constantValues)) {
+            $unfiltered = HTML_QuickForm::arrayMerge($unfiltered, $this->_constantValues);
+        }
+
         return $unfiltered;
     }
     /**
@@ -1730,6 +1726,12 @@ var skipClientValidation = false;
 
 function qf_errorHandler(element, _qfMsg) {
   div = element.parentNode;
+
+  if ((div == undefined) || (element.name == undefined)) {
+    //no checking can be done for undefined elements so let server handle it.
+    return true;
+  }
+
   if (_qfMsg != \'\') {
     var errorSpan = document.getElementById(\'id_error_\'+element.name);
     if (!errorSpan) {
@@ -1779,16 +1781,25 @@ function qf_errorHandler(element, _qfMsg) {
                 $elementName);
             $js .= '
 function validate_' . $this->_formName . '_' . $escapedElementName . '(element) {
+  if (undefined == element) {
+     //required element was not found, then let form be submitted without client side validation
+     return true;
+  }
   var value = \'\';
   var errFlag = new Array();
   var _qfGroups = {};
   var _qfMsg = \'\';
   var frm = element.parentNode;
-  while (frm && frm.nodeName.toUpperCase() != "FORM") {
-    frm = frm.parentNode;
+  if ((undefined != element.name) && (frm != undefined)) {
+      while (frm && frm.nodeName.toUpperCase() != "FORM") {
+        frm = frm.parentNode;
+      }
+    ' . join("\n", $jsArr) . '
+      return qf_errorHandler(element, _qfMsg);
+  } else {
+    //element name should be defined else error msg will not be displayed.
+    return true;
   }
-' . join("\n", $jsArr) . '
-  return qf_errorHandler(element, _qfMsg);
 }
 ';
             $validateJS .= '
@@ -2344,6 +2355,57 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
     }
 }
 
+/**
+ * Required elements validation
+ * This class overrides QuickForm validation since it allowed space or empty tag as a value
+ */
+class MoodleQuickForm_Rule_Required extends HTML_QuickForm_Rule {
+    /**
+     * Checks if an element is not empty.
+     * This is a server-side validation, it works for both text fields and editor fields
+     *
+     * @param     string    $value      Value to check
+     * @param     mixed     $options    Not used yet
+     * @return    boolean   true if value is not empty
+     */
+    function validate($value, $options = null) {
+        global $CFG;
+        if (is_array($value) && array_key_exists('text', $value)) {
+            $value = $value['text'];
+        }
+        $stripvalues = array(
+            '#</?(?!img|canvas|hr).*?>#im', // all tags except img, canvas and hr
+            '#(\xc2|\xa0|\s|&nbsp;)#', //any whitespaces actually
+        );
+        if (!empty($CFG->strictformsrequired)) {
+            $value = preg_replace($stripvalues, '', (string)$value);
+        }
+        if ((string)$value == '') {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * This function returns Javascript code used to build client-side validation.
+     * It checks if an element is not empty.
+     * Note, that QuickForm does not know how to work with editor text field and builds not correct
+     * JS code for validation. If client check is enabled for editor field it will not be validated
+     * on client side no matter what this function returns.
+     *
+     * @param     mixed     $options    Not used yet
+     * @return array
+     */
+    function getValidationScript($options = null) {
+        global $CFG;
+        if (!empty($CFG->strictformsrequired)) {
+            return array('', "{jsVar}.replace(/^\s+$/g, '') == ''");
+        } else {
+            return array('', "{jsVar} == ''");
+        }
+    }
+}
+
 /**
  * @global object $GLOBALS['_HTML_QuickForm_default_renderer']
  * @name $_HTML_QuickForm_default_renderer
@@ -2387,3 +2449,5 @@ MoodleQuickForm::registerElementType('text', "$CFG->libdir/form/text.php", 'Mood
 MoodleQuickForm::registerElementType('textarea', "$CFG->libdir/form/textarea.php", 'MoodleQuickForm_textarea');
 MoodleQuickForm::registerElementType('url', "$CFG->libdir/form/url.php", 'MoodleQuickForm_url');
 MoodleQuickForm::registerElementType('warning', "$CFG->libdir/form/warning.php", 'MoodleQuickForm_warning');
+
+MoodleQuickForm::registerRule('required', null, 'MoodleQuickForm_Rule_Required', "$CFG->libdir/formslib.php");
index 97c4233..3278e7c 100644 (file)
@@ -794,10 +794,16 @@ class grade_grade extends grade_object {
         // Get course-module
         $cm = get_coursemodule_from_instance($this->grade_item->itemmodule,
               $this->grade_item->iteminstance, $this->grade_item->courseid);
+        // If the course-module doesn't exist, display a warning...
         if (!$cm) {
-            debugging("Couldn't find course-module for module
-                '{$this->grade_item->itemmodule}', instance '{$this->grade_item->iteminstance}',
-                course '{$this->grade_item->courseid}'");
+            // ...unless the grade is being deleted in which case it's likely
+            // that the course-module was just deleted too, so that's okay.
+            if (!$deleted) {
+                debugging("Couldn't find course-module for module '" .
+                        $this->grade_item->itemmodule . "', instance '" .
+                        $this->grade_item->iteminstance . "', course '" .
+                        $this->grade_item->courseid . "'");
+            }
             return;
         }
 
index 120de12..708d242 100644 (file)
@@ -717,7 +717,7 @@ function groups_course_module_visible($cm, $userid=null) {
  * @return void
  */
 function _group_verify_activegroup($courseid, $groupmode, $groupingid, array $allowedgroups) {
-    global $SESSION;
+    global $SESSION, $USER;
 
     // init activegroup array if necessary
     if (!isset($SESSION->activegroup)) {
@@ -742,7 +742,11 @@ function _group_verify_activegroup($courseid, $groupmode, $groupingid, array $al
             $SESSION->activegroup[$courseid][$groupmode][$groupingid] = 0; // all groups by default if user has accessallgroups
 
         } else if ($allowedgroups) {
-            $firstgroup = reset($allowedgroups);
+            if ($groupmode != SEPARATEGROUPS and $mygroups = groups_get_all_groups($courseid, $USER->id, $groupingid)) {
+                $firstgroup = reset($mygroups);
+            } else {
+                $firstgroup = reset($allowedgroups);
+            }
             $SESSION->activegroup[$courseid][$groupmode][$groupingid] = $firstgroup->id;
 
         } else {
index f6f9561..536c141 100644 (file)
@@ -361,21 +361,29 @@ M.util.init_select_autosubmit = function(Y, formid, selectid, nothing) {
             // Make sure we have the form
             if (form) {
                 // Create a function to handle our change event
-                var processchange = function(e, lastindex) {
-                    if ((nothing===false || select.get('value') != nothing) && lastindex != select.get('selectedIndex')) {
+                var processchange = function(e, paramobject) {
+                    if ((nothing===false || select.get('value') != nothing) && paramobject.lastindex != select.get('selectedIndex')) {
+                        //prevent event bubbling and detach handlers to prevent multiple submissions caused by double clicking
+                        e.halt();
+                        paramobject.eventkeypress.detach();
+                        paramobject.eventblur.detach();
+                        paramobject.eventchangeorblur.detach();
+
                         this.submit();
                     }
                 };
                 // Attach the change event to the keypress, blur, and click actions.
                 // We don't use the change event because IE fires it on every arrow up/down
                 // event.... usability
-                Y.on('key', processchange, select, 'press:13', form, select.get('selectedIndex'));
-                select.on('blur', processchange, form, select.get('selectedIndex'));
+                var paramobject = new Object();
+                paramobject.lastindex = select.get('selectedIndex');
+                paramobject.eventkeypress = Y.on('key', processchange, select, 'press:13', form, paramobject);
+                paramobject.eventblur = select.on('blur', processchange, form, paramobject);
                 //little hack for chrome that need onChange event instead of onClick - see MDL-23224
                 if (Y.UA.webkit) {
-                    select.on('change', processchange, form, select.get('selectedIndex'));
+                    paramobject.eventchangeorblur = select.on('change', processchange, form, paramobject);
                 } else {
-                    select.on('click', processchange, form, select.get('selectedIndex'));
+                    paramobject.eventchangeorblur = select.on('click', processchange, form, paramobject);
                 }
             }
         }
@@ -924,7 +932,7 @@ function filterByParent(elCollection, parentFinder) {
     var filteredCollection = [];
     for (var i = 0; i < elCollection.length; ++i) {
         var findParent = parentFinder(elCollection[i]);
-        if (findParent.nodeName.toUpperCase != 'BODY') {
+        if (findParent.nodeName.toUpperCase() != 'BODY') {
             filteredCollection.push(elCollection[i]);
         }
     }
index 6cf7236..61a85a5 100644 (file)
@@ -3509,6 +3509,9 @@ function delete_user($user) {
     // last course access not necessary either
     $DB->delete_records('user_lastaccess', array('userid'=>$user->id));
 
+    // force logout - may fail if file based sessions used, sorry
+    session_kill_user($user->id);
+
     // now do a final accesslib cleanup - removes all role assignments in user context and context itself
     delete_context(CONTEXT_USER, $user->id);
 
@@ -9365,9 +9368,10 @@ WHERE m.useridto = :userid AND p.name='popup'";
             $smallmessage = null;
             if (!empty($message_users->smallmessage)) {
                 //display the first 200 chars of the message in the popup
+                $textlib = textlib_get_instance();
                 $smallmessage = null;
-                if (strlen($message_users->smallmessage>200)) {
-                    $smallmessage = substr($message_users->smallmessage,0,200).'...';
+                if ($textlib->strlen($message_users->smallmessage) > 200) {
+                    $smallmessage = $textlib->substr($message_users->smallmessage,0,200).'...';
                 } else {
                     $smallmessage = $message_users->smallmessage;
                 }
index c76963b..e2aab50 100644 (file)
@@ -1635,9 +1635,20 @@ class global_navigation extends navigation_node {
 
         $namingfunction = 'callback_'.$courseformat.'_get_section_name';
         $namingfunctionexists = (function_exists($namingfunction));
-        $activesection = course_get_display($course->id);
+
         $viewhiddensections = has_capability('moodle/course:viewhiddensections', $this->page->context);
 
+        $urlfunction = 'callback_'.$courseformat.'_get_section_url';
+        if (empty($CFG->navlinkcoursesections) || !function_exists($urlfunction)) {
+            $urlfunction = null;
+        }
+
+        $keyfunction = 'callback_'.$courseformat.'_request_key';
+        $key = course_get_display($course->id);
+        if (defined('AJAX_SCRIPT') && AJAX_SCRIPT == '0' && function_exists($keyfunction) && $this->page->url->compare(new moodle_url('/course/view.php'), URL_MATCH_BASE)) {
+            $key = optional_param($keyfunction(), $key, PARAM_INT);
+        }
+
         $navigationsections = array();
         foreach ($sections as $sectionid => $section) {
             $section = clone($section);
@@ -1652,13 +1663,16 @@ class global_navigation extends navigation_node {
                 } else {
                     $sectionname = get_string('section').' '.$section->section;
                 }
-                //$url = new moodle_url('/course/view.php', array('id'=>$course->id));
+
                 $url = null;
+                if (!empty($urlfunction)) {
+                    $url = $urlfunction($course->id, $section->section);
+                }
                 $sectionnode = $coursenode->add($sectionname, $url, navigation_node::TYPE_SECTION, null, $section->id);
                 $sectionnode->nodetype = navigation_node::NODETYPE_BRANCH;
                 $sectionnode->hidden = (!$section->visible);
-                if ($this->page->context->contextlevel != CONTEXT_MODULE && $section->hasactivites && ($sectionnode->isactive || ($activesection && $section->section == $activesection))) {
-                    $sectionnode->force_open();
+                if ($key != '0' && $section->section != '0' && $section->section == $key && $this->page->context->contextlevel != CONTEXT_MODULE && $section->hasactivites) {
+                    $sectionnode->make_active();
                     $this->load_section_activities($sectionnode, $section->section, $activities);
                 }
                 $section->sectionnode = $sectionnode;
@@ -1824,6 +1838,9 @@ class global_navigation extends navigation_node {
         if ($iscurrentuser && !$forceforcontext) {
             // If it's the current user the information will go under the profile root node
             $usernode = $this->rootnodes['myprofile'];
+            $course = get_site();
+            $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
+            $issitecourse = true;
         } else {
             if (!$issitecourse) {
                 // Not the current user so add it to the participants node for the current course
index be7eba7..b832df4 100644 (file)
@@ -2427,8 +2427,10 @@ EOD;
         // Increment the menu count. This is used for ID's that get worked with
         // in JavaScript as is essential
         $menucount++;
-        // Initialise this custom menu
-        $this->page->requires->js_init_call('M.core_custom_menu.init', array('custom_menu_'.$menucount));
+        // Initialise this custom menu (the custom menu object is contained in javascript-static
+        $jscode = js_writer::function_call_with_Y('M.core_custom_menu.init', array('custom_menu_'.$menucount));
+        $jscode = "(function(){{$jscode}})";
+        $this->page->requires->yui_module('node-menunav', $jscode);
         // Build the root nodes as required by YUI
         $content = html_writer::start_tag('div', array('id'=>'custom_menu_'.$menucount, 'class'=>'yui3-menu yui3-menu-horizontal javascript-disabled'));
         $content .= html_writer::start_tag('div', array('class'=>'yui3-menu-content'));
index fe6c3f6..e9e4a7e 100644 (file)
@@ -1502,13 +1502,6 @@ class HTML_QuickForm extends HTML_Common {
                         $values[] = $this->getSubmitValue($elName);
                     }
                     $result = $registry->validate($rule['type'], $values, $rule['format'], true);
-                } else if ($rule['type'] === 'required' and $this->getElement($target)->_type === 'editor') {
-                    //horrible horrible hack
-                    if (!isset($submitValue['text']) or $submitValue['text'] === '') {
-                        $result = false;
-                    } else {
-                        $result = true;
-                    }
                 } elseif (is_array($submitValue) && !isset($rule['howmany'])) {
                     $result = $registry->validate($rule['type'], $submitValue, $rule['format'], true);
                 } else {
index 8fa59f4..00eeff5 100644 (file)
@@ -22,8 +22,6 @@ and documented for Moodle at:
 
 4/ MDL-20876 - replaced deprecated split() with explode() or str_split() where appropriate
 
-5/ hardcoded editor element required rule validation
-
 Such modifications should be carefully each time the Excel PEAR package is updated
 to a new release within Moodle.
 
index becd7d7..53f0315 100644 (file)
@@ -279,11 +279,40 @@ abstract class session_stub implements moodle_session {
         if (!isset($CFG->sessioncookie)) {
             $CFG->sessioncookie = '';
         }
+
+        // make sure cookie domain makes sense for this wwwroot
         if (!isset($CFG->sessioncookiedomain)) {
             $CFG->sessioncookiedomain = '';
+        } else if ($CFG->sessioncookiedomain !== '') {
+            $host = parse_url($CFG->wwwroot, PHP_URL_HOST);
+            if ($CFG->sessioncookiedomain !== $host) {
+                if (substr($CFG->sessioncookiedomain, 0, 1) === '.') {
+                    if (!preg_match('|^.*'.preg_quote($CFG->sessioncookiedomain, '|').'$|', $host)) {
+                        // invalid domain - it must be end part of host
+                        $CFG->sessioncookiedomain = '';
+                    }
+                } else {
+                    if (!preg_match('|^.*\.'.preg_quote($CFG->sessioncookiedomain, '|').'$|', $host)) {
+                        // invalid domain - it must be end part of host
+                        $CFG->sessioncookiedomain = '';
+                    }
+                }
+            }
         }
+
+        // make sure the cookiepath is valid for this wwwroot or autodetect if not specified
         if (!isset($CFG->sessioncookiepath)) {
-            $CFG->sessioncookiepath = '/';
+            $CFG->sessioncookiepath = '';
+        }
+        if ($CFG->sessioncookiepath !== '/') {
+            $path = parse_url($CFG->wwwroot, PHP_URL_PATH).'/';
+            if ($CFG->sessioncookiepath === '') {
+                $CFG->sessioncookiepath = $path;
+            } else {
+                if (strpos($path, $CFG->sessioncookiepath) !== 0 or substr($CFG->sessioncookiepath, -1) !== '/') {
+                    $CFG->sessioncookiepath = $path;
+                }
+            }
         }
 
         //discard session ID from POST, GET and globals to tighten security,
index e02e7e5..9100c19 100644 (file)
@@ -38,7 +38,6 @@ if (!defined('MOODLE_INTERNAL')) {
 require_once("$CFG->libdir/portfoliolib.php");
 require_once("$CFG->libdir/portfolio/exporter.php");
 require_once("$CFG->libdir/portfolio/plugin.php");
-require_once("$CFG->dirroot/$CFG->admin/generator.php");
 
 class portfolio_plugin_test extends portfolio_plugin_push_base {
     public function expected_time($callertime){
diff --git a/lib/simpletest/testformslib.php b/lib/simpletest/testformslib.php
new file mode 100644 (file)
index 0000000..0330895
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+
+/**
+ * Unit tests for /lib/formslib.php.
+ *
+ * @package   file
+ * @copyright 2011 Sam Hemelryk
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+if (!defined('MOODLE_INTERNAL')) {
+    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
+}
+require_once($CFG->libdir . '/formslib.php');
+
+class formslib_test extends UnitTestCase {
+
+    public function test_require_rule() {
+        global $CFG;
+
+        $strictformsrequired = false;
+        if (!empty($CFG->strictformsrequired)) {
+            $strictformsrequired = $CFG->strictformsrequired;
+        }
+
+        $rule = new MoodleQuickForm_Rule_Required();
+
+        // First run the tests with strictformsrequired off
+        $CFG->strictformsrequired = false;
+        // Passes
+        $this->assertTrue($rule->validate('Something'));
+        $this->assertTrue($rule->validate("Something\nmore"));
+        $this->assertTrue($rule->validate("\nmore"));
+        $this->assertTrue($rule->validate(" more "));
+        $this->assertTrue($rule->validate("0"));
+        $this->assertTrue($rule->validate(0));
+        $this->assertTrue($rule->validate(true));
+        $this->assertTrue($rule->validate(' '));
+        $this->assertTrue($rule->validate('      '));
+        $this->assertTrue($rule->validate("\t"));
+        $this->assertTrue($rule->validate("\n"));
+        $this->assertTrue($rule->validate("\r"));
+        $this->assertTrue($rule->validate("\r\n"));
+        $this->assertTrue($rule->validate(" \t  \n  \r "));
+        $this->assertTrue($rule->validate('<p></p>'));
+        $this->assertTrue($rule->validate('<p> </p>'));
+        $this->assertTrue($rule->validate('<p>x</p>'));
+        $this->assertTrue($rule->validate('<img src="smile.jpg" alt="smile" />'));
+        $this->assertTrue($rule->validate('<img src="smile.jpg" alt="smile"/>'));
+        $this->assertTrue($rule->validate('<img src="smile.jpg" alt="smile"></img>'));
+        $this->assertTrue($rule->validate('<hr />'));
+        $this->assertTrue($rule->validate('<hr/>'));
+        $this->assertTrue($rule->validate('<hr>'));
+        $this->assertTrue($rule->validate('<hr></hr>'));
+        $this->assertTrue($rule->validate('<br />'));
+        $this->assertTrue($rule->validate('<br/>'));
+        $this->assertTrue($rule->validate('<br>'));
+        $this->assertTrue($rule->validate('&nbsp;'));
+        // Fails
+        $this->assertFalse($rule->validate(''));
+        $this->assertFalse($rule->validate(false));
+        $this->assertFalse($rule->validate(null));
+
+        // Now run the same tests with it on to make sure things work as expected
+        $CFG->strictformsrequired = true;
+        // Passes
+        $this->assertTrue($rule->validate('Something'));
+        $this->assertTrue($rule->validate("Something\nmore"));
+        $this->assertTrue($rule->validate("\nmore"));
+        $this->assertTrue($rule->validate(" more "));
+        $this->assertTrue($rule->validate("0"));
+        $this->assertTrue($rule->validate(0));
+        $this->assertTrue($rule->validate(true));
+        $this->assertTrue($rule->validate('<p>x</p>'));
+        $this->assertTrue($rule->validate('<img src="smile.jpg" alt="smile" />'));
+        $this->assertTrue($rule->validate('<img src="smile.jpg" alt="smile"/>'));
+        $this->assertTrue($rule->validate('<img src="smile.jpg" alt="smile"></img>'));
+        $this->assertTrue($rule->validate('<hr />'));
+        $this->assertTrue($rule->validate('<hr/>'));
+        $this->assertTrue($rule->validate('<hr>'));
+        $this->assertTrue($rule->validate('<hr></hr>'));
+        // Fails
+        $this->assertFalse($rule->validate(' '));
+        $this->assertFalse($rule->validate('      '));
+        $this->assertFalse($rule->validate("\t"));
+        $this->assertFalse($rule->validate("\n"));
+        $this->assertFalse($rule->validate("\r"));
+        $this->assertFalse($rule->validate("\r\n"));
+        $this->assertFalse($rule->validate(" \t  \n  \r "));
+        $this->assertFalse($rule->validate('<p></p>'));
+        $this->assertFalse($rule->validate('<p> </p>'));
+        $this->assertFalse($rule->validate('<br />'));
+        $this->assertFalse($rule->validate('<br/>'));
+        $this->assertFalse($rule->validate('<br>'));
+        $this->assertFalse($rule->validate('&nbsp;'));
+        $this->assertFalse($rule->validate(''));
+        $this->assertFalse($rule->validate(false));
+        $this->assertFalse($rule->validate(null));
+
+        $CFG->strictformsrequired = $strictformsrequired;
+    }
+
+}
\ No newline at end of file
index d4a44d1..4a23924 100644 (file)
@@ -36,7 +36,6 @@ if (!defined('MOODLE_INTERNAL')) {
 }
 
 require_once("$CFG->dirroot/repository/lib.php");
-require_once("$CFG->dirroot/$CFG->admin/generator.php");
 
 // Generate a mock class for each plugin subclass present
 $repository_plugins = get_list_of_plugins('repository');
index bcad5c3..3463ebd 100644 (file)
@@ -29,7 +29,7 @@
     <licenseversion></licenseversion>
   </library>
   <library>
-    <location>editor</location>
+    <location>editor/tinymce/tiny_mce</location>
     <name>TinyMCE</name>
     <license>LGPL</license>
     <version>3.4.2</version>
index 0a4482f..01df2c7 100644 (file)
@@ -1049,1137 +1049,1153 @@ id,name,year,tzrule,gmtoff,dstoff,dst_month,dst_startday,dst_weekday,dst_skipwee
 1048,Europe/Kaliningrad,1992,Russia,120,60,3,-1,6,0,25:00,9,-1,6,0,24:00
 1049,Europe/Kaliningrad,1993,Russia,120,60,3,-1,0,0,04:00,9,-1,0,0,04:00
 1050,Europe/Kaliningrad,1996,Russia,120,60,3,-1,0,0,04:00,10,-1,0,0,04:00
-1051,Europe/Moscow,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
-1052,Europe/Moscow,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
-1053,Europe/Moscow,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
-1054,Europe/Moscow,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1055,Europe/Moscow,1991,Russia,120,60,3,-1,0,0,04:00,9,-1,0,0,04:00
-1056,Europe/Moscow,1992,Russia,180,60,3,-1,6,0,26:00,9,-1,6,0,25:00
-1057,Europe/Moscow,1993,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1058,Europe/Moscow,1996,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
-1059,Europe/Volgograd,1970,Russia,240,60,9,1,-1,0,04:00,10,1,-1,0,03:00
-1060,Europe/Volgograd,1981,Russia,240,60,4,1,-1,0,04:00,10,1,-1,0,03:00
-1061,Europe/Volgograd,1984,Russia,240,60,4,1,-1,0,04:00,9,-1,0,0,06:00
-1062,Europe/Volgograd,1985,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
-1063,Europe/Volgograd,1989,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1064,Europe/Volgograd,1991,,240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1065,Europe/Volgograd,1992,Russia,180,60,3,-1,6,0,26:00,9,-1,6,0,25:00
-1066,Europe/Volgograd,1993,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1067,Europe/Volgograd,1996,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
-1068,Europe/Samara,1970,Russia,240,60,9,1,-1,0,04:00,10,1,-1,0,03:00
-1069,Europe/Samara,1981,Russia,240,60,4,1,-1,0,04:00,10,1,-1,0,03:00
-1070,Europe/Samara,1984,Russia,240,60,4,1,-1,0,04:00,9,-1,0,0,06:00
-1071,Europe/Samara,1985,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
-1072,Europe/Samara,1989,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1073,Europe/Samara,1991,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
-1074,Europe/Samara,1992,Russia,240,60,3,-1,6,0,27:00,9,-1,6,0,26:00
-1075,Europe/Samara,1993,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
-1076,Europe/Samara,1996,Russia,240,60,3,-1,0,0,06:00,10,-1,0,0,06:00
-1077,Europe/Samara,2010,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
-1078,Asia/Yekaterinburg,1970,Russia,300,60,9,1,-1,0,05:00,10,1,-1,0,04:00
-1079,Asia/Yekaterinburg,1981,Russia,300,60,4,1,-1,0,05:00,10,1,-1,0,04:00
-1080,Asia/Yekaterinburg,1984,Russia,300,60,4,1,-1,0,05:00,9,-1,0,0,07:00
-1081,Asia/Yekaterinburg,1985,Russia,300,60,3,-1,0,0,07:00,9,-1,0,0,07:00
-1082,Asia/Yekaterinburg,1991,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
-1083,Asia/Yekaterinburg,1992,Russia,300,60,3,-1,6,0,28:00,9,-1,6,0,27:00
-1084,Asia/Yekaterinburg,1993,Russia,300,60,3,-1,0,0,07:00,9,-1,0,0,07:00
-1085,Asia/Yekaterinburg,1996,Russia,300,60,3,-1,0,0,07:00,10,-1,0,0,07:00
-1086,Asia/Omsk,1970,Russia,360,60,9,1,-1,0,06:00,10,1,-1,0,05:00
-1087,Asia/Omsk,1981,Russia,360,60,4,1,-1,0,06:00,10,1,-1,0,05:00
-1088,Asia/Omsk,1984,Russia,360,60,4,1,-1,0,06:00,9,-1,0,0,08:00
-1089,Asia/Omsk,1985,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
-1090,Asia/Omsk,1991,Russia,300,60,3,-1,0,0,07:00,9,-1,0,0,07:00
-1091,Asia/Omsk,1992,Russia,360,60,3,-1,6,0,29:00,9,-1,6,0,28:00
-1092,Asia/Omsk,1993,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
-1093,Asia/Omsk,1996,Russia,360,60,3,-1,0,0,08:00,10,-1,0,0,08:00
-1094,Asia/Novosibirsk,1970,Russia,420,60,9,1,-1,0,07:00,10,1,-1,0,06:00
-1095,Asia/Novosibirsk,1981,Russia,420,60,4,1,-1,0,07:00,10,1,-1,0,06:00
-1096,Asia/Novosibirsk,1984,Russia,420,60,4,1,-1,0,07:00,9,-1,0,0,09:00
-1097,Asia/Novosibirsk,1985,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
-1098,Asia/Novosibirsk,1991,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
-1099,Asia/Novosibirsk,1992,Russia,420,60,3,-1,6,0,30:00,9,-1,6,0,29:00
-1100,Asia/Novosibirsk,1993,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
-1101,Asia/Novosibirsk,1996,Russia,360,60,3,-1,0,0,08:00,10,-1,0,0,08:00
-1102,Asia/Novokuznetsk,1970,Russia,420,60,9,1,-1,0,07:00,10,1,-1,0,06:00
-1103,Asia/Novokuznetsk,1981,Russia,420,60,4,1,-1,0,07:00,10,1,-1,0,06:00
-1104,Asia/Novokuznetsk,1984,Russia,420,60,4,1,-1,0,07:00,9,-1,0,0,09:00
-1105,Asia/Novokuznetsk,1985,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
-1106,Asia/Novokuznetsk,1991,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
-1107,Asia/Novokuznetsk,1992,Russia,420,60,3,-1,6,0,30:00,9,-1,6,0,29:00
-1108,Asia/Novokuznetsk,1993,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
-1109,Asia/Novokuznetsk,1996,Russia,420,60,3,-1,0,0,09:00,10,-1,0,0,09:00
-1110,Asia/Novokuznetsk,2010,Russia,360,60,3,-1,0,0,08:00,10,-1,0,0,08:00
-1111,Asia/Krasnoyarsk,1970,Russia,420,60,9,1,-1,0,07:00,10,1,-1,0,06:00
-1112,Asia/Krasnoyarsk,1981,Russia,420,60,4,1,-1,0,07:00,10,1,-1,0,06:00
-1113,Asia/Krasnoyarsk,1984,Russia,420,60,4,1,-1,0,07:00,9,-1,0,0,09:00
-1114,Asia/Krasnoyarsk,1985,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
-1115,Asia/Krasnoyarsk,1991,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
-1116,Asia/Krasnoyarsk,1992,Russia,420,60,3,-1,6,0,30:00,9,-1,6,0,29:00
-1117,Asia/Krasnoyarsk,1993,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
-1118,Asia/Krasnoyarsk,1996,Russia,420,60,3,-1,0,0,09:00,10,-1,0,0,09:00
-1119,Asia/Irkutsk,1970,Russia,480,60,9,1,-1,0,08:00,10,1,-1,0,07:00
-1120,Asia/Irkutsk,1981,Russia,480,60,4,1,-1,0,08:00,10,1,-1,0,07:00
-1121,Asia/Irkutsk,1984,Russia,480,60,4,1,-1,0,08:00,9,-1,0,0,10:00
-1122,Asia/Irkutsk,1985,Russia,480,60,3,-1,0,0,10:00,9,-1,0,0,10:00
-1123,Asia/Irkutsk,1991,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
-1124,Asia/Irkutsk,1992,Russia,480,60,3,-1,6,0,31:00,9,-1,6,0,30:00
-1125,Asia/Irkutsk,1993,Russia,480,60,3,-1,0,0,10:00,9,-1,0,0,10:00
-1126,Asia/Irkutsk,1996,Russia,480,60,3,-1,0,0,10:00,10,-1,0,0,10:00
-1127,Asia/Yakutsk,1970,Russia,540,60,9,1,-1,0,09:00,10,1,-1,0,08:00
-1128,Asia/Yakutsk,1981,Russia,540,60,4,1,-1,0,09:00,10,1,-1,0,08:00
-1129,Asia/Yakutsk,1984,Russia,540,60,4,1,-1,0,09:00,9,-1,0,0,11:00
-1130,Asia/Yakutsk,1985,Russia,540,60,3,-1,0,0,11:00,9,-1,0,0,11:00
-1131,Asia/Yakutsk,1991,Russia,480,60,3,-1,0,0,10:00,9,-1,0,0,10:00
-1132,Asia/Yakutsk,1992,Russia,540,60,3,-1,6,0,32:00,9,-1,6,0,31:00
-1133,Asia/Yakutsk,1993,Russia,540,60,3,-1,0,0,11:00,9,-1,0,0,11:00
-1134,Asia/Yakutsk,1996,Russia,540,60,3,-1,0,0,11:00,10,-1,0,0,11:00
-1135,Asia/Vladivostok,1970,Russia,600,60,9,1,-1,0,10:00,10,1,-1,0,09:00
-1136,Asia/Vladivostok,1981,Russia,600,60,4,1,-1,0,10:00,10,1,-1,0,09:00
-1137,Asia/Vladivostok,1984,Russia,600,60,4,1,-1,0,10:00,9,-1,0,0,12:00
-1138,Asia/Vladivostok,1985,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
-1139,Asia/Vladivostok,1991,Russia,540,60,3,-1,0,0,11:00,9,-1,0,0,11:00
-1140,Asia/Vladivostok,1992,Russia,600,60,3,-1,6,0,33:00,9,-1,6,0,32:00
-1141,Asia/Vladivostok,1993,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
-1142,Asia/Vladivostok,1996,Russia,600,60,3,-1,0,0,12:00,10,-1,0,0,12:00
-1143,Asia/Sakhalin,1970,Russia,660,60,9,1,-1,0,11:00,10,1,-1,0,10:00
-1144,Asia/Sakhalin,1981,Russia,660,60,4,1,-1,0,11:00,10,1,-1,0,10:00
-1145,Asia/Sakhalin,1984,Russia,660,60,4,1,-1,0,11:00,9,-1,0,0,13:00
-1146,Asia/Sakhalin,1985,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
-1147,Asia/Sakhalin,1991,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
-1148,Asia/Sakhalin,1992,Russia,660,60,3,-1,6,0,34:00,9,-1,6,0,33:00
-1149,Asia/Sakhalin,1993,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
-1150,Asia/Sakhalin,1996,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
-1151,Asia/Sakhalin,1997,Russia,600,60,3,-1,0,0,12:00,10,-1,0,0,12:00
-1152,Asia/Magadan,1970,Russia,660,60,9,1,-1,0,11:00,10,1,-1,0,10:00
-1153,Asia/Magadan,1981,Russia,660,60,4,1,-1,0,11:00,10,1,-1,0,10:00
-1154,Asia/Magadan,1984,Russia,660,60,4,1,-1,0,11:00,9,-1,0,0,13:00
-1155,Asia/Magadan,1985,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
-1156,Asia/Magadan,1991,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
-1157,Asia/Magadan,1992,Russia,660,60,3,-1,6,0,34:00,9,-1,6,0,33:00
-1158,Asia/Magadan,1993,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
-1159,Asia/Magadan,1996,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
-1160,Asia/Kamchatka,1970,Russia,720,60,9,1,-1,0,12:00,10,1,-1,0,11:00
-1161,Asia/Kamchatka,1981,Russia,720,60,4,1,-1,0,12:00,10,1,-1,0,11:00
-1162,Asia/Kamchatka,1984,Russia,720,60,4,1,-1,0,12:00,9,-1,0,0,14:00
-1163,Asia/Kamchatka,1985,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
-1164,Asia/Kamchatka,1991,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
-1165,Asia/Kamchatka,1992,Russia,720,60,3,-1,6,0,35:00,9,-1,6,0,34:00
-1166,Asia/Kamchatka,1993,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
-1167,Asia/Kamchatka,1996,Russia,720,60,3,-1,0,0,14:00,10,-1,0,0,14:00
-1168,Asia/Kamchatka,2010,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
-1169,Asia/Anadyr,1970,Russia,780,60,9,1,-1,0,13:00,10,1,-1,0,12:00
-1170,Asia/Anadyr,1981,Russia,780,60,4,1,-1,0,13:00,10,1,-1,0,12:00
-1171,Asia/Anadyr,1982,Russia,720,60,4,1,-1,0,12:00,10,1,-1,0,11:00
-1172,Asia/Anadyr,1984,Russia,720,60,4,1,-1,0,12:00,9,-1,0,0,14:00
-1173,Asia/Anadyr,1985,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
-1174,Asia/Anadyr,1991,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
-1175,Asia/Anadyr,1992,Russia,720,60,3,-1,6,0,35:00,9,-1,6,0,34:00
-1176,Asia/Anadyr,1993,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
-1177,Asia/Anadyr,1996,Russia,720,60,3,-1,0,0,14:00,10,-1,0,0,14:00
-1178,Asia/Anadyr,2010,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
-1179,Europe/Belgrade,1970,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
-1180,Europe/Belgrade,1982,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1181,Europe/Belgrade,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1182,Europe/Madrid,1970,Spain,60,60,4,30,-1,0,24:00,9,30,-1,0,01:00
-1183,Europe/Madrid,1974,Spain,60,60,4,13,6,0,24:00,10,1,0,0,01:00
-1184,Europe/Madrid,1976,Spain,60,60,3,27,-1,0,24:00,9,-1,0,0,01:00
-1185,Europe/Madrid,1977,Spain,60,60,4,2,-1,0,24:00,9,-1,0,0,01:00
-1186,Europe/Madrid,1978,Spain,60,60,4,2,-1,0,24:00,10,1,-1,0,01:00
-1187,Europe/Madrid,1979,EU,60,60,4,1,0,0,1:00,9,-1,0,0,1:00
-1188,Europe/Madrid,1981,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1189,Europe/Madrid,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1190,Africa/Ceuta,1970,SpainAfrica,0,60,6,3,-1,0,12:00,10,1,-1,0,-1:00
-1191,Africa/Ceuta,1974,SpainAfrica,0,60,6,24,-1,0,00:00,9,1,-1,0,-1:00
-1192,Africa/Ceuta,1976,SpainAfrica,0,60,5,1,-1,0,00:00,8,1,-1,0,-1:00
-1193,Africa/Ceuta,1977,SpainAfrica,0,60,5,1,-1,0,00:00,9,28,-1,0,-1:00
-1194,Africa/Ceuta,1978,SpainAfrica,0,60,6,1,-1,0,00:00,8,4,-1,0,-1:00
-1195,Africa/Ceuta,1979,SpainAfrica,0,0,6,1,-1,0,00:00,8,4,-1,0,-1:00
-1196,Africa/Ceuta,1984,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
-1197,Africa/Ceuta,1986,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1198,Africa/Ceuta,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1199,Atlantic/Canary,1970,,0,0,0,0,0,0,00:00,0,0,0,0,00:00
-1200,Atlantic/Canary,1980,EU,0,60,4,1,0,0,1:00,9,-1,0,0,1:00
-1201,Atlantic/Canary,1981,EU,0,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1202,Atlantic/Canary,1996,EU,0,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1203,Europe/Stockholm,1970,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
-1204,Europe/Stockholm,1980,EU,60,60,4,1,0,0,1:00,9,-1,0,0,1:00
-1205,Europe/Stockholm,1981,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1206,Europe/Stockholm,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1207,Europe/Zurich,1970,Swiss,60,0,5,1,1,0,02:00,10,1,1,0,02:00
-1208,Europe/Zurich,1981,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1209,Europe/Zurich,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1210,Europe/Istanbul,1970,Turkey,120,60,5,2,0,0,02:00,10,2,0,0,01:00
-1211,Europe/Istanbul,1973,Turkey,120,60,6,3,-1,0,03:00,11,4,-1,0,04:00
-1212,Europe/Istanbul,1974,Turkey,120,60,3,31,-1,0,04:00,11,3,-1,0,06:00
-1213,Europe/Istanbul,1975,Turkey,120,60,3,30,-1,0,02:00,10,-1,0,0,01:00
-1214,Europe/Istanbul,1976,Turkey,120,60,6,1,-1,0,02:00,10,-1,0,0,01:00
-1215,Europe/Istanbul,1977,Turkey,120,60,4,1,0,0,02:00,10,16,-1,0,01:00
-1216,Europe/Istanbul,1978,Turkey,180,60,4,1,0,0,03:00,1,1,-1,0,14:00
-1217,Europe/Istanbul,1979,Turkey,180,60,4,1,0,0,06:00,10,11,1,0,02:00
-1218,Europe/Istanbul,1981,Turkey,180,60,3,-1,0,0,06:00,10,11,1,0,02:00
-1219,Europe/Istanbul,1983,Turkey,180,60,7,31,-1,0,03:00,10,2,-1,0,02:00
-1220,Europe/Istanbul,1985,Turkey,120,60,4,20,-1,0,02:00,9,28,-1,0,01:00
-1221,Europe/Istanbul,1986,Turkey,120,60,3,-1,0,0,04:00,9,-1,0,0,04:00
-1222,Europe/Istanbul,1991,Turkey,120,60,3,-1,0,0,03:00,9,-1,0,0,03:00
-1223,Europe/Istanbul,1996,Turkey,120,60,3,-1,0,0,03:00,10,-1,0,0,03:00
-1224,Europe/Istanbul,2006,Turkey,120,0,3,-1,0,0,03:00,10,-1,0,0,03:00
-1225,Europe/Istanbul,2007,EU,120,0,3,-1,0,0,03:00,10,-1,0,0,03:00
-1226,Europe/Kiev,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
-1227,Europe/Kiev,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
-1228,Europe/Kiev,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
-1229,Europe/Kiev,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1230,Europe/Kiev,1990,,120,0,0,0,0,0,00:00,0,0,0,0,00:00
-1231,Europe/Kiev,1992,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
-1232,Europe/Kiev,1995,EU,120,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1233,Europe/Kiev,1996,EU,120,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1234,Europe/Uzhgorod,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
-1235,Europe/Uzhgorod,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
-1236,Europe/Uzhgorod,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
-1237,Europe/Uzhgorod,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1238,Europe/Uzhgorod,1990,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
-1239,Europe/Uzhgorod,1991,,120,0,0,0,0,0,00:00,0,0,0,0,00:00
-1240,Europe/Uzhgorod,1992,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
-1241,Europe/Uzhgorod,1995,EU,120,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1242,Europe/Uzhgorod,1996,EU,120,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1243,Europe/Zaporozhye,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
-1244,Europe/Zaporozhye,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
-1245,Europe/Zaporozhye,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
-1246,Europe/Zaporozhye,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1247,Europe/Zaporozhye,1991,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
-1248,Europe/Zaporozhye,1995,EU,120,60,3,-1,0,0,1:00,9,-1,0,0,1:00
-1249,Europe/Zaporozhye,1996,EU,120,60,3,-1,0,0,1:00,10,-1,0,0,1:00
-1250,Europe/Simferopol,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
-1251,Europe/Simferopol,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
-1252,Europe/Simferopol,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
-1253,Europe/Simferopol,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
-1254,Europe/Simferopol,1990,,120,0,0,0,0,0,00:00,0,0,0,0,00:00
-1255,Europe/Simferopol,1992,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
-1256,Europe/Simferopol,1994,E-Eur,180,60,3,-1,0,0,03:00,9,-1,0,0,02:00
-1257,Europe/Simferopol,1996,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
-1258,Europe/Simferopol,1997,EU,120,60,3,-1,0,0,04:00,10,-1,0,0,04:00
-1259,EST,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1260,MST,1970,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
-1261,HST,1970,,-600,0,0,0,0,0,00:00,0,0,0,0,00:00
-1262,EST5EDT,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1263,EST5EDT,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
-1264,EST5EDT,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
-1265,EST5EDT,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1266,EST5EDT,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1267,EST5EDT,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1268,CST6CDT,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1269,CST6CDT,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
-1270,CST6CDT,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
-1271,CST6CDT,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1272,CST6CDT,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1273,CST6CDT,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1274,MST7MDT,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1275,MST7MDT,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
-1276,MST7MDT,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
-1277,MST7MDT,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1278,MST7MDT,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1279,MST7MDT,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1280,PST8PDT,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1281,PST8PDT,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
-1282,PST8PDT,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
-1283,PST8PDT,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1284,PST8PDT,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1285,PST8PDT,2007,US,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
-1286,America/New_York,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1287,America/New_York,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
-1288,America/New_York,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
-1289,America/New_York,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1290,America/New_York,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1291,America/New_York,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1292,America/Chicago,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1293,America/Chicago,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
-1294,America/Chicago,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
-1295,America/Chicago,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1296,America/Chicago,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1297,America/Chicago,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1298,America/North_Dakota/Center,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1299,America/North_Dakota/Center,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
-1300,America/North_Dakota/Center,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
-1301,America/North_Dakota/Center,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1302,America/North_Dakota/Center,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1303,America/North_Dakota/Center,1992,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1304,America/North_Dakota/Center,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1305,America/North_Dakota/New_Salem,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1306,America/North_Dakota/New_Salem,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
-1307,America/North_Dakota/New_Salem,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
-1308,America/North_Dakota/New_Salem,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1309,America/North_Dakota/New_Salem,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1310,America/North_Dakota/New_Salem,2003,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1311,America/North_Dakota/New_Salem,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1312,America/North_Dakota/Beulah,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1313,America/North_Dakota/Beulah,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
-1314,America/North_Dakota/Beulah,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
-1315,America/North_Dakota/Beulah,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1316,America/North_Dakota/Beulah,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1317,America/North_Dakota/Beulah,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1318,America/North_Dakota/Beulah,2010,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1319,America/Denver,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1320,America/Denver,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
-1321,America/Denver,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
-1322,America/Denver,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1323,America/Denver,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1324,America/Denver,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1325,America/Los_Angeles,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1326,America/Los_Angeles,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
-1327,America/Los_Angeles,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
-1328,America/Los_Angeles,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1329,America/Los_Angeles,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1330,America/Los_Angeles,2007,US,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
-1331,America/Juneau,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1332,America/Juneau,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
-1333,America/Juneau,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
-1334,America/Juneau,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1335,America/Juneau,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
-1336,America/Juneau,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
-1337,America/Juneau,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
-1338,America/Sitka,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1339,America/Sitka,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
-1340,America/Sitka,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
-1341,America/Sitka,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1342,America/Sitka,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
-1343,America/Sitka,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
-1344,America/Sitka,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
-1345,America/Metlakatla,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1346,America/Metlakatla,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
-1347,America/Metlakatla,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
-1348,America/Metlakatla,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1349,America/Metlakatla,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1350,America/Metlakatla,2007,US,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
-1351,America/Yakutat,1970,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
-1352,America/Yakutat,1974,US,-540,60,1,6,-1,0,-7:00,10,-1,0,0,-8:00
-1353,America/Yakutat,1975,US,-540,60,2,23,-1,0,-7:00,10,-1,0,0,-8:00
-1354,America/Yakutat,1976,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
-1355,America/Yakutat,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
-1356,America/Yakutat,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
-1357,America/Anchorage,1970,US,-600,60,4,-1,0,0,-8:00,10,-1,0,0,-9:00
-1358,America/Anchorage,1974,US,-600,60,1,6,-1,0,-8:00,10,-1,0,0,-9:00
-1359,America/Anchorage,1975,US,-600,60,2,23,-1,0,-8:00,10,-1,0,0,-9:00
-1360,America/Anchorage,1976,US,-600,60,4,-1,0,0,-8:00,10,-1,0,0,-9:00
-1361,America/Anchorage,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
-1362,America/Anchorage,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
-1363,America/Anchorage,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
-1364,America/Nome,1970,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
-1365,America/Nome,1974,US,-660,60,1,6,-1,0,-9:00,10,-1,0,0,-10:00
-1366,America/Nome,1975,US,-660,60,2,23,-1,0,-9:00,10,-1,0,0,-10:00
-1367,America/Nome,1976,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
-1368,America/Nome,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
-1369,America/Nome,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
-1370,America/Nome,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
-1371,America/Adak,1970,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
-1372,America/Adak,1974,US,-660,60,1,6,-1,0,-9:00,10,-1,0,0,-10:00
-1373,America/Adak,1975,US,-660,60,2,23,-1,0,-9:00,10,-1,0,0,-10:00
-1374,America/Adak,1976,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
-1375,America/Adak,1983,US,-600,60,4,-1,0,0,-8:00,10,-1,0,0,-9:00
-1376,America/Adak,1987,US,-600,60,4,1,0,0,-8:00,10,-1,0,0,-9:00
-1377,America/Adak,2007,US,-600,60,3,8,0,0,-8:00,11,1,0,0,-9:00
-1378,Pacific/Honolulu,1970,,-600,0,0,0,0,0,00:00,0,0,0,0,00:00
-1379,America/Phoenix,1970,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
-1380,America/Boise,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1381,America/Boise,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
-1382,America/Boise,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
-1383,America/Boise,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1384,America/Boise,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1385,America/Boise,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1386,America/Indiana/Indianapolis,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1387,America/Indiana/Indianapolis,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1388,America/Indiana/Indianapolis,2006,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1389,America/Indiana/Indianapolis,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1390,America/Indiana/Marengo,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1391,America/Indiana/Marengo,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
-1392,America/Indiana/Marengo,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
-1393,America/Indiana/Marengo,1976,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1394,America/Indiana/Marengo,2006,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1395,America/Indiana/Marengo,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1396,America/Indiana/Vincennes,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1397,America/Indiana/Vincennes,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1398,America/Indiana/Vincennes,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1399,America/Indiana/Vincennes,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1400,America/Indiana/Tell_City,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1401,America/Indiana/Tell_City,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1402,America/Indiana/Tell_City,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1403,America/Indiana/Tell_City,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1404,America/Indiana/Petersburg,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1405,America/Indiana/Petersburg,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
-1406,America/Indiana/Petersburg,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
-1407,America/Indiana/Petersburg,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1408,America/Indiana/Petersburg,1977,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1409,America/Indiana/Petersburg,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1410,America/Indiana/Petersburg,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1411,America/Indiana/Knox,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1412,America/Indiana/Knox,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
-1413,America/Indiana/Knox,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
-1414,America/Indiana/Knox,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1415,America/Indiana/Knox,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1416,America/Indiana/Knox,1991,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1417,America/Indiana/Knox,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1418,America/Indiana/Knox,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1419,America/Indiana/Winamac,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1420,America/Indiana/Winamac,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1421,America/Indiana/Winamac,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1422,America/Indiana/Winamac,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1423,America/Indiana/Vevay,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1424,America/Indiana/Vevay,1973,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1425,America/Indiana/Vevay,2006,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1426,America/Indiana/Vevay,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1427,America/Kentucky/Louisville,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1428,America/Kentucky/Louisville,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
-1429,America/Kentucky/Louisville,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
-1430,America/Kentucky/Louisville,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1431,America/Kentucky/Louisville,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1432,America/Kentucky/Louisville,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1433,America/Kentucky/Monticello,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1434,America/Kentucky/Monticello,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
-1435,America/Kentucky/Monticello,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
-1436,America/Kentucky/Monticello,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1437,America/Kentucky/Monticello,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1438,America/Kentucky/Monticello,2000,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1439,America/Kentucky/Monticello,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1440,America/Detroit,1970,Detroit,-300,0,6,14,-1,0,-3:00,10,-1,0,0,-4:00
-1441,America/Detroit,1973,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1442,America/Detroit,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
-1443,America/Detroit,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
-1444,America/Detroit,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1445,America/Detroit,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1446,America/Detroit,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1447,America/Menominee,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1448,America/Menominee,1973,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1449,America/Menominee,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
-1450,America/Menominee,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
-1451,America/Menominee,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1452,America/Menominee,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1453,America/Menominee,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1454,America/St_Johns,1970,StJohns,-210,60,4,-1,0,0,-1:30,10,-1,0,0,-2:30
-1455,America/St_Johns,1987,StJohns,-210,60,4,1,0,0,-3:29,10,-1,0,0,-4:29
-1456,America/St_Johns,1988,StJohns,-210,120,4,1,0,0,-3:29,10,-1,0,0,-4:29
-1457,America/St_Johns,1989,StJohns,-210,60,4,1,0,0,-3:29,10,-1,0,0,-4:29
-1458,America/St_Johns,2007,StJohns,-210,60,3,8,0,0,-3:29,11,1,0,0,-4:29
-1459,America/Goose_Bay,1970,StJohns,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1460,America/Goose_Bay,1987,StJohns,-240,60,4,1,0,0,-3:59,10,-1,0,0,-4:59
-1461,America/Goose_Bay,1988,StJohns,-240,120,4,1,0,0,-3:59,10,-1,0,0,-4:59
-1462,America/Goose_Bay,1989,StJohns,-240,60,4,1,0,0,-3:59,10,-1,0,0,-4:59
-1463,America/Goose_Bay,2007,StJohns,-240,60,3,8,0,0,-3:59,11,1,0,0,-4:59
-1464,America/Halifax,1970,Halifax,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1465,America/Halifax,1973,Halifax,-240,0,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1466,America/Halifax,1974,Canada,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1467,America/Halifax,1987,Canada,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
-1468,America/Halifax,2007,Canada,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
-1469,America/Glace_Bay,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1470,America/Glace_Bay,1972,Halifax,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1471,America/Glace_Bay,1973,Halifax,-240,0,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1472,America/Glace_Bay,1974,Canada,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1473,America/Glace_Bay,1987,Canada,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
-1474,America/Glace_Bay,2007,Canada,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
-1475,America/Moncton,1970,Moncton,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1476,America/Moncton,1973,Canada,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1477,America/Moncton,1987,Canada,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
-1478,America/Moncton,1993,Moncton,-240,60,4,1,0,0,-3:59,10,-1,0,0,-4:59
-1479,America/Moncton,2006,Moncton,-240,0,4,1,0,0,-3:59,10,-1,0,0,-4:59
-1480,America/Moncton,2007,Canada,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
-1481,America/Blanc-Sablon,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1482,America/Montreal,1970,Mont,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1483,America/Montreal,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1484,America/Montreal,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1485,America/Montreal,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1486,America/Toronto,1970,Toronto,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1487,America/Toronto,1973,Toronto,-300,0,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1488,America/Toronto,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1489,America/Toronto,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1490,America/Toronto,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1491,America/Thunder_Bay,1970,Mont,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1492,America/Thunder_Bay,1973,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1493,America/Thunder_Bay,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1494,America/Thunder_Bay,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1495,America/Thunder_Bay,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1496,America/Nipigon,1970,Canada,-300,60,8,14,-1,0,23:00,9,30,-1,0,-4:00
-1497,America/Nipigon,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1498,America/Nipigon,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1499,America/Nipigon,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1500,America/Rainy_River,1970,Canada,-360,60,8,14,-1,0,23:00,9,30,-1,0,-5:00
-1501,America/Rainy_River,1974,Canada,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1502,America/Rainy_River,1987,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1503,America/Rainy_River,2007,Canada,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1504,America/Atikokan,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1505,America/Winnipeg,1970,Winn,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-4:00
-1506,America/Winnipeg,1987,Winn,-360,60,4,1,0,0,-4:00,10,-1,0,0,-4:00
-1507,America/Winnipeg,2005,Winn,-360,0,4,1,0,0,-4:00,10,-1,0,0,-4:00
-1508,America/Winnipeg,2006,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1509,America/Winnipeg,2007,Canada,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1510,America/Regina,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1511,America/Swift_Current,1970,Swift,-420,0,4,-1,0,0,-5:00,9,-1,0,0,-6:00
-1512,America/Swift_Current,1972,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1513,America/Edmonton,1970,Edm,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1514,America/Edmonton,1987,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1515,America/Edmonton,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1516,America/Vancouver,1970,Vanc,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1517,America/Vancouver,1987,Canada,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1518,America/Vancouver,2007,Canada,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
-1519,America/Dawson_Creek,1970,Vanc,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1520,America/Dawson_Creek,1972,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
-1521,America/Pangnirtung,1970,NT_YK,-240,120,4,-1,0,0,-4:00,10,-1,0,0,-3:00
-1522,America/Pangnirtung,1980,NT_YK,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1523,America/Pangnirtung,1987,NT_YK,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
-1524,America/Pangnirtung,1995,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1525,America/Pangnirtung,1999,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1526,America/Pangnirtung,2000,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1527,America/Pangnirtung,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1528,America/Iqaluit,1970,NT_YK,-300,120,4,-1,0,0,-5:00,10,-1,0,0,-4:00
-1529,America/Iqaluit,1980,NT_YK,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1530,America/Iqaluit,1987,NT_YK,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1531,America/Iqaluit,1999,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1532,America/Iqaluit,2000,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1533,America/Iqaluit,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1534,America/Resolute,1970,NT_YK,-360,120,4,-1,0,0,-6:00,10,-1,0,0,-5:00
-1535,America/Resolute,1980,NT_YK,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1536,America/Resolute,1987,NT_YK,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1537,America/Resolute,2000,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1538,America/Resolute,2001,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1539,America/Resolute,2006,Resolute,-300,0,12,31,-1,0,07:00,11,1,0,0,-4:00
-1540,America/Resolute,2007,Resolute,-300,0,12,31,-1,0,07:00,3,8,0,0,-4:00
-1541,America/Rankin_Inlet,1970,NT_YK,-360,120,4,-1,0,0,-6:00,10,-1,0,0,-5:00
-1542,America/Rankin_Inlet,1980,NT_YK,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
-1543,America/Rankin_Inlet,1987,NT_YK,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1544,America/Rankin_Inlet,2000,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1545,America/Rankin_Inlet,2001,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1546,America/Rankin_Inlet,2007,Canada,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
-1547,America/Cambridge_Bay,1970,NT_YK,-420,120,4,-1,0,0,-7:00,10,-1,0,0,-6:00
-1548,America/Cambridge_Bay,1980,NT_YK,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1549,America/Cambridge_Bay,1987,NT_YK,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1550,America/Cambridge_Bay,1999,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1551,America/Cambridge_Bay,2000,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1552,America/Cambridge_Bay,2001,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1553,America/Cambridge_Bay,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1554,America/Yellowknife,1970,NT_YK,-420,120,4,-1,0,0,-7:00,10,-1,0,0,-6:00
-1555,America/Yellowknife,1980,Canada,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1556,America/Yellowknife,1987,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1557,America/Yellowknife,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1558,America/Inuvik,1970,NT_YK,-480,120,4,-1,0,0,-8:00,10,-1,0,0,-7:00
-1559,America/Inuvik,1979,NT_YK,-420,120,4,-1,0,0,-7:00,10,-1,0,0,-6:00
-1560,America/Inuvik,1980,Canada,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1561,America/Inuvik,1987,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1562,America/Inuvik,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
-1563,America/Whitehorse,1970,NT_YK,-480,120,4,-1,0,0,-8:00,10,-1,0,0,-7:00
-1564,America/Whitehorse,1980,Canada,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1565,America/Whitehorse,1987,Canada,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1566,America/Whitehorse,2007,Canada,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
-1567,America/Dawson,1970,NT_YK,-540,120,4,-1,0,0,-9:00,10,-1,0,0,-8:00
-1568,America/Dawson,1973,NT_YK,-480,120,4,-1,0,0,-8:00,10,-1,0,0,-7:00
-1569,America/Dawson,1980,Canada,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1570,America/Dawson,1987,Canada,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1571,America/Dawson,2007,Canada,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
-1572,America/Cancun,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1573,America/Cancun,1981,Mexico,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1574,America/Cancun,1996,Mexico,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1575,America/Cancun,1998,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1576,America/Cancun,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
-1577,America/Cancun,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1578,America/Merida,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1579,America/Merida,1981,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1580,America/Merida,1982,Mexico,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1581,America/Merida,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1582,America/Merida,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
-1583,America/Merida,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1584,America/Matamoros,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1585,America/Matamoros,1988,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1586,America/Matamoros,1989,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1587,America/Matamoros,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
-1588,America/Matamoros,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1589,America/Matamoros,2010,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1590,America/Monterrey,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1591,America/Monterrey,1988,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1592,America/Monterrey,1989,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1593,America/Monterrey,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
-1594,America/Monterrey,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1595,America/Mexico_City,1970,Mexico,-360,60,2,12,-1,0,-6:00,7,30,-1,0,-7:00
-1596,America/Mexico_City,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1597,America/Mexico_City,2001,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1598,America/Mexico_City,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1599,America/Ojinaga,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1600,America/Ojinaga,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1601,America/Ojinaga,1998,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1602,America/Ojinaga,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
-1603,America/Ojinaga,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1604,America/Ojinaga,2010,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1605,America/Chihuahua,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1606,America/Chihuahua,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1607,America/Chihuahua,1998,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1608,America/Chihuahua,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
-1609,America/Chihuahua,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1610,America/Hermosillo,1970,Mexico,-420,60,2,12,-1,0,-7:00,7,30,-1,0,-8:00
-1611,America/Hermosillo,1996,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1612,America/Hermosillo,1999,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
-1613,America/Mazatlan,1970,Mexico,-420,60,2,12,-1,0,-7:00,7,30,-1,0,-8:00
-1614,America/Mazatlan,1996,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1615,America/Mazatlan,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
-1616,America/Mazatlan,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1617,America/Bahia_Banderas,1970,Mexico,-420,60,2,12,-1,0,-7:00,7,30,-1,0,-8:00
-1618,America/Bahia_Banderas,1996,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1619,America/Bahia_Banderas,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
-1620,America/Bahia_Banderas,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1621,America/Bahia_Banderas,2010,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
-1622,America/Tijuana,1970,,-480,0,0,0,0,0,00:00,0,0,0,0,00:00
-1623,America/Tijuana,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1624,America/Tijuana,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1625,America/Tijuana,1996,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1626,America/Tijuana,2001,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1627,America/Tijuana,2002,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1628,America/Tijuana,2010,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1629,America/Santa_Isabel,1970,,-480,0,0,0,0,0,00:00,0,0,0,0,00:00
-1630,America/Santa_Isabel,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
-1631,America/Santa_Isabel,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1632,America/Santa_Isabel,1996,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1633,America/Santa_Isabel,2001,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1634,America/Santa_Isabel,2002,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
-1635,America/Anguilla,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1636,America/Antigua,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1637,America/Nassau,1970,Bahamas,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1638,America/Nassau,1975,Bahamas,-300,0,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1639,America/Nassau,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1640,America/Nassau,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1641,America/Nassau,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1642,America/Barbados,1970,Barb,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1643,America/Barbados,1977,Barb,-240,60,6,12,-1,0,-2:00,10,1,0,0,-3:00
-1644,America/Barbados,1978,Barb,-240,60,4,15,0,0,-2:00,10,1,0,0,-3:00
-1645,America/Barbados,1979,Barb,-240,60,4,15,0,0,-2:00,9,30,-1,0,-3:00
-1646,America/Barbados,1980,Barb,-240,60,4,15,0,0,-2:00,9,25,-1,0,-3:00
-1647,America/Barbados,1981,Barb,-240,0,4,15,0,0,-2:00,9,25,-1,0,-3:00
-1648,America/Belize,1970,Belize,-360,0,12,31,-1,0,06:00,2,9,0,0,-7:00
-1649,America/Belize,1973,Belize,-360,60,12,5,-1,0,-6:00,1,1,-1,0,05:00
-1650,America/Belize,1974,Belize,-360,0,12,31,-1,0,06:00,2,9,-1,0,-7:00
-1651,America/Belize,1982,Belize,-360,60,12,18,-1,0,-6:00,1,1,-1,0,05:00
-1652,America/Belize,1983,Belize,-360,0,12,31,-1,0,06:00,2,12,-1,0,-7:00
-1653,Atlantic/Bermuda,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1654,Atlantic/Bermuda,1974,Bahamas,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1655,Atlantic/Bermuda,1975,Bahamas,-240,0,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1656,Atlantic/Bermuda,1976,US,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
-1657,Atlantic/Bermuda,1987,US,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
-1658,Atlantic/Bermuda,2007,US,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
-1659,America/Cayman,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1660,America/Costa_Rica,1970,CR,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1661,America/Costa_Rica,1979,CR,-360,60,2,-1,0,0,-6:00,6,1,0,0,-7:00
-1662,America/Costa_Rica,1991,CR,-360,60,1,15,6,0,-6:00,7,1,-1,0,-7:00
-1663,America/Costa_Rica,1992,CR,-360,60,1,15,6,0,-6:00,3,15,-1,0,-7:00
-1664,America/Costa_Rica,1993,CR,-360,0,1,15,6,0,-6:00,3,15,-1,0,-7:00
-1665,America/Havana,1970,Cuba,-300,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1666,America/Havana,1972,Cuba,-300,60,4,-1,0,0,-5:00,10,8,-1,0,-6:00
-1667,America/Havana,1975,Cuba,-300,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1668,America/Havana,1978,Cuba,-300,60,5,7,-1,0,-5:00,10,8,0,0,-6:00
-1669,America/Havana,1979,Cuba,-300,60,3,15,0,0,-5:00,10,8,0,0,-6:00
-1670,America/Havana,1981,Cuba,-300,60,5,5,0,0,-5:00,10,8,0,0,-6:00
-1671,America/Havana,1986,Cuba,-300,60,3,14,0,0,-5:00,10,8,0,0,-6:00
-1672,America/Havana,1990,Cuba,-300,60,4,1,0,0,-5:00,10,8,0,0,-6:00
-1673,America/Havana,1991,Cuba,-300,60,4,1,0,0,-5:00,10,8,0,0,-5:00
-1674,America/Havana,1996,Cuba,-300,60,4,1,0,0,-5:00,10,6,-1,0,-5:00
-1675,America/Havana,1997,Cuba,-300,60,4,1,0,0,-5:00,10,12,-1,0,-5:00
-1676,America/Havana,1998,Cuba,-300,60,3,-1,0,0,-5:00,10,-1,0,0,-5:00
-1677,America/Havana,2000,Cuba,-300,60,4,1,0,0,-5:00,10,-1,0,0,-5:00
-1678,America/Havana,2004,Cuba,-300,60,4,1,0,0,-5:00,1,1,-1,0,06:00
-1679,America/Havana,2006,Cuba,-300,0,12,31,-1,0,07:00,10,-1,0,0,-5:00
-1680,America/Havana,2007,Cuba,-300,60,3,8,0,0,-5:00,10,-1,0,0,-5:00
-1681,America/Havana,2008,Cuba,-300,60,3,15,0,0,-5:00,10,-1,0,0,-5:00
-1682,America/Havana,2009,Cuba,-300,60,3,8,0,0,-5:00,10,-1,0,0,-5:00
-1683,America/Havana,2011,Cuba,-300,60,3,15,0,0,-5:00,10,-1,0,0,-5:00
-1684,America/Havana,2012,Cuba,-300,60,3,8,0,0,-5:00,10,-1,0,0,-5:00
-1685,America/Dominica,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1686,America/Santo_Domingo,1970,DR,-300,30,10,-1,0,0,-5:00,2,21,-1,0,-6:00
-1687,America/Santo_Domingo,1971,DR,-300,30,10,-1,0,0,-5:00,1,20,-1,0,-6:00
-1688,America/Santo_Domingo,1972,DR,-300,30,10,-1,0,0,-5:00,1,21,-1,0,-6:00
-1689,America/Santo_Domingo,1974,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1690,America/El_Salvador,1970,Salv,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1691,America/El_Salvador,1987,Salv,-360,60,5,1,0,0,-6:00,9,-1,0,0,-7:00
-1692,America/El_Salvador,1988,Salv,-360,0,5,1,0,0,-6:00,9,-1,0,0,-7:00
-1693,America/Grenada,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1694,America/Guadeloupe,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1695,America/Guatemala,1970,Guat,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1696,America/Guatemala,1973,Guat,-360,60,11,25,-1,0,-6:00,1,1,-1,0,05:00
-1697,America/Guatemala,1974,Guat,-360,0,12,31,-1,0,06:00,2,24,-1,0,-7:00
-1698,America/Guatemala,1983,Guat,-360,60,5,21,-1,0,-6:00,9,22,-1,0,-7:00
-1699,America/Guatemala,1991,Guat,-360,60,3,23,-1,0,-6:00,9,7,-1,0,-7:00
-1700,America/Guatemala,2006,Guat,-360,60,4,30,-1,0,-6:00,10,1,-1,0,-7:00
-1701,America/Guatemala,2007,Guat,-360,0,4,30,-1,0,-6:00,10,1,-1,0,-7:00
-1702,America/Port-au-Prince,1970,Haiti,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1703,America/Port-au-Prince,1983,Haiti,-300,60,5,8,-1,0,-5:00,10,-1,0,0,-6:00
-1704,America/Port-au-Prince,1984,Haiti,-300,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
-1705,America/Port-au-Prince,1988,Haiti,-300,60,4,1,0,0,-4:00,10,-1,0,0,-4:00
-1706,America/Port-au-Prince,2005,Haiti,-300,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1707,America/Port-au-Prince,2006,Haiti,-300,0,4,1,0,0,-5:00,10,-1,0,0,-6:00
-1708,America/Tegucigalpa,1970,Hond,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1709,America/Tegucigalpa,1987,Hond,-360,60,5,1,0,0,-6:00,9,-1,0,0,-7:00
-1710,America/Tegucigalpa,2006,Hond,-360,60,5,1,0,0,-6:00,8,1,1,0,-7:00
-1711,America/Tegucigalpa,2007,Hond,-360,0,5,1,0,0,-6:00,8,1,1,0,-7:00
-1712,America/Jamaica,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1713,America/Jamaica,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
-1714,America/Jamaica,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
-1715,America/Jamaica,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1716,America/Jamaica,1984,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1717,America/Martinique,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1718,America/Martinique,1980,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1719,America/Montserrat,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1720,America/Managua,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1721,America/Managua,1973,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1722,America/Managua,1975,Nic,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1723,America/Managua,1979,Nic,-360,60,3,16,0,0,-6:00,6,23,1,0,-7:00
-1724,America/Managua,1992,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1725,America/Managua,1993,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1726,America/Managua,1997,Nic,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-1727,America/Managua,2005,Nic,-360,60,4,10,-1,0,-6:00,10,1,0,0,-7:00
-1728,America/Managua,2006,Nic,-360,60,4,30,-1,0,-4:00,10,1,0,0,-6:00
-1729,America/Managua,2007,Nic,-360,0,4,30,-1,0,-4:00,10,1,0,0,-6:00
-1730,America/Panama,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1731,America/Puerto_Rico,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1732,America/St_Kitts,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1733,America/St_Lucia,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1734,America/Miquelon,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1735,America/Miquelon,1980,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1736,America/Miquelon,1987,Canada,-180,60,4,1,0,0,-1:00,10,-1,0,0,-2:00
-1737,America/Miquelon,2007,Canada,-180,60,3,8,0,0,-1:00,11,1,0,0,-2:00
-1738,America/St_Vincent,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1739,America/Grand_Turk,1970,TC,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-1740,America/Grand_Turk,1979,TC,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
-1741,America/Grand_Turk,1987,TC,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
-1742,America/Grand_Turk,2007,TC,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
-1743,America/Tortola,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1744,America/St_Thomas,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1745,America/Argentina/Buenos_Aires,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1746,America/Argentina/Buenos_Aires,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1747,America/Argentina/Buenos_Aires,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1748,America/Argentina/Buenos_Aires,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1749,America/Argentina/Buenos_Aires,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1750,America/Argentina/Buenos_Aires,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1751,America/Argentina/Buenos_Aires,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
-1752,America/Argentina/Buenos_Aires,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1753,America/Argentina/Buenos_Aires,2008,Arg,-180,60,10,15,0,0,-3:00,3,15,0,0,-4:00
-1754,America/Argentina/Buenos_Aires,2009,Arg,-180,0,12,31,-1,0,09:00,3,15,0,0,-4:00
-1755,America/Argentina/Cordoba,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1756,America/Argentina/Cordoba,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1757,America/Argentina/Cordoba,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1758,America/Argentina/Cordoba,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1759,America/Argentina/Cordoba,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1760,America/Argentina/Cordoba,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1761,America/Argentina/Cordoba,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
-1762,America/Argentina/Cordoba,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1763,America/Argentina/Cordoba,2008,Arg,-180,60,10,15,0,0,-3:00,3,15,0,0,-4:00
-1764,America/Argentina/Cordoba,2009,Arg,-180,0,12,31,-1,0,09:00,3,15,0,0,-4:00
-1765,America/Argentina/Salta,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1766,America/Argentina/Salta,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1767,America/Argentina/Salta,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1768,America/Argentina/Salta,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1769,America/Argentina/Salta,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1770,America/Argentina/Salta,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1771,America/Argentina/Salta,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
-1772,America/Argentina/Salta,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1773,America/Argentina/Salta,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1774,America/Argentina/Tucuman,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1775,America/Argentina/Tucuman,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1776,America/Argentina/Tucuman,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1777,America/Argentina/Tucuman,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1778,America/Argentina/Tucuman,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1779,America/Argentina/Tucuman,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1780,America/Argentina/Tucuman,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1781,America/Argentina/Tucuman,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1782,America/Argentina/Tucuman,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1783,America/Argentina/Tucuman,2008,Arg,-180,60,10,15,0,0,-3:00,3,15,0,0,-4:00
-1784,America/Argentina/Tucuman,2009,Arg,-180,0,12,31,-1,0,09:00,3,15,0,0,-4:00
-1785,America/Argentina/La_Rioja,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1786,America/Argentina/La_Rioja,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1787,America/Argentina/La_Rioja,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1788,America/Argentina/La_Rioja,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1789,America/Argentina/La_Rioja,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1790,America/Argentina/La_Rioja,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1791,America/Argentina/La_Rioja,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1792,America/Argentina/La_Rioja,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1793,America/Argentina/La_Rioja,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1794,America/Argentina/La_Rioja,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1795,America/Argentina/San_Juan,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1796,America/Argentina/San_Juan,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1797,America/Argentina/San_Juan,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1798,America/Argentina/San_Juan,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1799,America/Argentina/San_Juan,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1800,America/Argentina/San_Juan,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1801,America/Argentina/San_Juan,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1802,America/Argentina/San_Juan,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1803,America/Argentina/San_Juan,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1804,America/Argentina/San_Juan,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1805,America/Argentina/Jujuy,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1806,America/Argentina/Jujuy,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1807,America/Argentina/Jujuy,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1808,America/Argentina/Jujuy,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1809,America/Argentina/Jujuy,1990,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1810,America/Argentina/Jujuy,1991,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1811,America/Argentina/Jujuy,1992,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1812,America/Argentina/Jujuy,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1813,America/Argentina/Jujuy,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1814,America/Argentina/Jujuy,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
-1815,America/Argentina/Jujuy,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1816,America/Argentina/Jujuy,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1817,America/Argentina/Catamarca,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1818,America/Argentina/Catamarca,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1819,America/Argentina/Catamarca,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1820,America/Argentina/Catamarca,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1821,America/Argentina/Catamarca,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1822,America/Argentina/Catamarca,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1823,America/Argentina/Catamarca,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1824,America/Argentina/Catamarca,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1825,America/Argentina/Catamarca,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1826,America/Argentina/Catamarca,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1827,America/Argentina/Mendoza,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1828,America/Argentina/Mendoza,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1829,America/Argentina/Mendoza,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1830,America/Argentina/Mendoza,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1831,America/Argentina/Mendoza,1990,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1832,America/Argentina/Mendoza,1992,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1833,America/Argentina/Mendoza,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1834,America/Argentina/Mendoza,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1835,America/Argentina/Mendoza,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1836,America/Argentina/Mendoza,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1837,America/Argentina/Mendoza,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1838,America/Argentina/Mendoza,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1839,America/Argentina/San_Luis,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1840,America/Argentina/San_Luis,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1841,America/Argentina/San_Luis,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1842,America/Argentina/San_Luis,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1843,America/Argentina/San_Luis,1990,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1844,America/Argentina/San_Luis,1991,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1845,America/Argentina/San_Luis,1999,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1846,America/Argentina/San_Luis,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1847,America/Argentina/San_Luis,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1848,America/Argentina/San_Luis,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1849,America/Argentina/San_Luis,2008,SanLuis,-240,60,10,8,0,0,-4:00,3,8,0,0,-5:00
-1850,America/Argentina/Rio_Gallegos,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1851,America/Argentina/Rio_Gallegos,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1852,America/Argentina/Rio_Gallegos,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1853,America/Argentina/Rio_Gallegos,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1854,America/Argentina/Rio_Gallegos,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1855,America/Argentina/Rio_Gallegos,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1856,America/Argentina/Rio_Gallegos,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1857,America/Argentina/Rio_Gallegos,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1858,America/Argentina/Rio_Gallegos,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1859,America/Argentina/Rio_Gallegos,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1860,America/Argentina/Ushuaia,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
-1861,America/Argentina/Ushuaia,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
-1862,America/Argentina/Ushuaia,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
-1863,America/Argentina/Ushuaia,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
-1864,America/Argentina/Ushuaia,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
-1865,America/Argentina/Ushuaia,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
-1866,America/Argentina/Ushuaia,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1867,America/Argentina/Ushuaia,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1868,America/Argentina/Ushuaia,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
-1869,America/Argentina/Ushuaia,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1870,America/Aruba,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1871,America/La_Paz,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1872,America/Noronha,1970,Brazil,-120,0,12,31,-1,0,10:00,3,1,-1,0,-3:00
-1873,America/Noronha,1985,Brazil,-120,60,11,2,-1,0,-2:00,1,1,-1,0,09:00
-1874,America/Noronha,1986,Brazil,-120,60,10,25,-1,0,-2:00,3,15,-1,0,-3:00
-1875,America/Noronha,1987,Brazil,-120,60,10,25,-1,0,-2:00,2,14,-1,0,-3:00
-1876,America/Noronha,1988,Brazil,-120,60,10,16,-1,0,-2:00,2,7,-1,0,-3:00
-1877,America/Noronha,1989,Brazil,-120,60,10,15,-1,0,-2:00,1,29,-1,0,-3:00
-1878,America/Noronha,1990,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
-1879,America/Noronha,1999,Brazil,-120,60,10,3,-1,0,-2:00,2,21,-1,0,-3:00
-1880,America/Noronha,2000,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
-1881,America/Noronha,2001,Brazil,-120,60,10,8,0,0,-2:00,2,15,0,0,-3:00
-1882,America/Noronha,2002,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
-1883,America/Belem,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
-1884,America/Belem,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
-1885,America/Belem,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
-1886,America/Belem,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
-1887,America/Belem,1988,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1888,America/Santarem,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
-1889,America/Santarem,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
-1890,America/Santarem,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
-1891,America/Santarem,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
-1892,America/Santarem,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-1893,America/Santarem,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1894,America/Fortaleza,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
-1895,America/Fortaleza,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
-1896,America/Fortaleza,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
-1897,America/Fortaleza,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
-1898,America/Fortaleza,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
-1899,America/Fortaleza,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
-1900,America/Fortaleza,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1901,America/Fortaleza,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
-1902,America/Fortaleza,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1903,America/Fortaleza,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
-1904,America/Fortaleza,2002,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1905,America/Recife,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
-1906,America/Recife,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
-1907,America/Recife,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
-1908,America/Recife,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
-1909,America/Recife,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
-1910,America/Recife,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
-1911,America/Recife,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1912,America/Recife,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
-1913,America/Recife,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1914,America/Recife,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
-1915,America/Recife,2002,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1916,America/Araguaina,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
-1917,America/Araguaina,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
-1918,America/Araguaina,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
-1919,America/Araguaina,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
-1920,America/Araguaina,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
-1921,America/Araguaina,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
-1922,America/Araguaina,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1923,America/Araguaina,1995,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
-1924,America/Araguaina,1996,Brazil,-180,60,10,6,-1,0,-3:00,2,11,-1,0,-4:00
-1925,America/Araguaina,1997,Brazil,-180,60,10,6,-1,0,-3:00,2,16,-1,0,-4:00
-1926,America/Araguaina,1998,Brazil,-180,60,10,11,-1,0,-3:00,3,1,-1,0,-4:00
-1927,America/Araguaina,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
-1928,America/Araguaina,2000,Brazil,-180,60,10,8,0,0,-3:00,2,27,-1,0,-4:00
-1929,America/Araguaina,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
-1930,America/Araguaina,2002,Brazil,-180,60,11,3,-1,0,-3:00,2,15,0,0,-4:00
-1931,America/Araguaina,2003,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1932,America/Maceio,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
-1933,America/Maceio,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
-1934,America/Maceio,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
-1935,America/Maceio,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
-1936,America/Maceio,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
-1937,America/Maceio,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
-1938,America/Maceio,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1939,America/Maceio,1995,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
-1940,America/Maceio,1996,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1941,America/Maceio,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
-1942,America/Maceio,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1943,America/Maceio,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
-1944,America/Maceio,2002,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1945,America/Bahia,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
-1946,America/Bahia,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
-1947,America/Bahia,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
-1948,America/Bahia,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
-1949,America/Bahia,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
-1950,America/Bahia,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
-1951,America/Bahia,1990,Brazil,-180,60,10,21,-1,0,-3:00,2,11,-1,0,-4:00
-1952,America/Bahia,1991,Brazil,-180,60,10,20,-1,0,-3:00,2,17,-1,0,-4:00
-1953,America/Bahia,1992,Brazil,-180,60,10,25,-1,0,-3:00,2,9,-1,0,-4:00
-1954,America/Bahia,1993,Brazil,-180,60,10,11,0,0,-3:00,1,31,-1,0,-4:00
-1955,America/Bahia,1994,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
-1956,America/Bahia,1996,Brazil,-180,60,10,6,-1,0,-3:00,2,11,-1,0,-4:00
-1957,America/Bahia,1997,Brazil,-180,60,10,6,-1,0,-3:00,2,16,-1,0,-4:00
-1958,America/Bahia,1998,Brazil,-180,60,10,11,-1,0,-3:00,3,1,-1,0,-4:00
-1959,America/Bahia,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
-1960,America/Bahia,2000,Brazil,-180,60,10,8,0,0,-3:00,2,27,-1,0,-4:00
-1961,America/Bahia,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
-1962,America/Bahia,2002,Brazil,-180,60,11,3,-1,0,-3:00,2,15,0,0,-4:00
-1963,America/Bahia,2003,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-1964,America/Sao_Paulo,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
-1965,America/Sao_Paulo,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
-1966,America/Sao_Paulo,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
-1967,America/Sao_Paulo,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
-1968,America/Sao_Paulo,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
-1969,America/Sao_Paulo,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
-1970,America/Sao_Paulo,1990,Brazil,-180,60,10,21,-1,0,-3:00,2,11,-1,0,-4:00
-1971,America/Sao_Paulo,1991,Brazil,-180,60,10,20,-1,0,-3:00,2,17,-1,0,-4:00
-1972,America/Sao_Paulo,1992,Brazil,-180,60,10,25,-1,0,-3:00,2,9,-1,0,-4:00
-1973,America/Sao_Paulo,1993,Brazil,-180,60,10,11,0,0,-3:00,1,31,-1,0,-4:00
-1974,America/Sao_Paulo,1994,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
-1975,America/Sao_Paulo,1996,Brazil,-180,60,10,6,-1,0,-3:00,2,11,-1,0,-4:00
-1976,America/Sao_Paulo,1997,Brazil,-180,60,10,6,-1,0,-3:00,2,16,-1,0,-4:00
-1977,America/Sao_Paulo,1998,Brazil,-180,60,10,11,-1,0,-3:00,3,1,-1,0,-4:00
-1978,America/Sao_Paulo,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
-1979,America/Sao_Paulo,2000,Brazil,-180,60,10,8,0,0,-3:00,2,27,-1,0,-4:00
-1980,America/Sao_Paulo,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
-1981,America/Sao_Paulo,2002,Brazil,-180,60,11,3,-1,0,-3:00,2,15,0,0,-4:00
-1982,America/Sao_Paulo,2003,Brazil,-180,60,10,19,-1,0,-3:00,2,15,0,0,-4:00
-1983,America/Sao_Paulo,2004,Brazil,-180,60,11,2,-1,0,-3:00,2,15,0,0,-4:00
-1984,America/Sao_Paulo,2005,Brazil,-180,60,10,16,-1,0,-3:00,2,15,0,0,-4:00
-1985,America/Sao_Paulo,2006,Brazil,-180,60,11,5,-1,0,-3:00,2,15,0,0,-4:00
-1986,America/Sao_Paulo,2007,Brazil,-180,60,10,8,0,0,-3:00,2,25,-1,0,-4:00
-1987,America/Sao_Paulo,2008,Brazil,-180,60,10,15,0,0,-3:00,2,15,0,0,-4:00
-1988,America/Sao_Paulo,2012,Brazil,-180,60,10,15,0,0,-3:00,2,22,0,0,-4:00
-1989,America/Sao_Paulo,2013,Brazil,-180,60,10,15,0,0,-3:00,2,15,0,0,-4:00
-1990,America/Sao_Paulo,2015,Brazil,-180,60,10,15,0,0,-3:00,2,22,0,0,-4:00
-1991,America/Sao_Paulo,2016,Brazil,-180,60,10,15,0,0,-3:00,2,15,0,0,-4:00
-1992,America/Campo_Grande,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
-1993,America/Campo_Grande,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
-1994,America/Campo_Grande,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
-1995,America/Campo_Grande,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
-1996,America/Campo_Grande,1988,Brazil,-240,60,10,16,-1,0,-4:00,2,7,-1,0,-5:00
-1997,America/Campo_Grande,1989,Brazil,-240,60,10,15,-1,0,-4:00,1,29,-1,0,-5:00
-1998,America/Campo_Grande,1990,Brazil,-240,60,10,21,-1,0,-4:00,2,11,-1,0,-5:00
-1999,America/Campo_Grande,1991,Brazil,-240,60,10,20,-1,0,-4:00,2,17,-1,0,-5:00
-2000,America/Campo_Grande,1992,Brazil,-240,60,10,25,-1,0,-4:00,2,9,-1,0,-5:00
-2001,America/Campo_Grande,1993,Brazil,-240,60,10,11,0,0,-4:00,1,31,-1,0,-5:00
-2002,America/Campo_Grande,1994,Brazil,-240,60,10,11,0,0,-4:00,2,15,0,0,-5:00
-2003,America/Campo_Grande,1996,Brazil,-240,60,10,6,-1,0,-4:00,2,11,-1,0,-5:00
-2004,America/Campo_Grande,1997,Brazil,-240,60,10,6,-1,0,-4:00,2,16,-1,0,-5:00
-2005,America/Campo_Grande,1998,Brazil,-240,60,10,11,-1,0,-4:00,3,1,-1,0,-5:00
-2006,America/Campo_Grande,1999,Brazil,-240,60,10,3,-1,0,-4:00,2,21,-1,0,-5:00
-2007,America/Campo_Grande,2000,Brazil,-240,60,10,8,0,0,-4:00,2,27,-1,0,-5:00
-2008,America/Campo_Grande,2001,Brazil,-240,60,10,8,0,0,-4:00,2,15,0,0,-5:00
-2009,America/Campo_Grande,2002,Brazil,-240,60,11,3,-1,0,-4:00,2,15,0,0,-5:00
-2010,America/Campo_Grande,2003,Brazil,-240,60,10,19,-1,0,-4:00,2,15,0,0,-5:00
-2011,America/Campo_Grande,2004,Brazil,-240,60,11,2,-1,0,-4:00,2,15,0,0,-5:00
-2012,America/Campo_Grande,2005,Brazil,-240,60,10,16,-1,0,-4:00,2,15,0,0,-5:00
-2013,America/Campo_Grande,2006,Brazil,-240,60,11,5,-1,0,-4:00,2,15,0,0,-5:00
-2014,America/Campo_Grande,2007,Brazil,-240,60,10,8,0,0,-4:00,2,25,-1,0,-5:00
-2015,America/Campo_Grande,2008,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
-2016,America/Campo_Grande,2012,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
-2017,America/Campo_Grande,2013,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
-2018,America/Campo_Grande,2015,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
-2019,America/Campo_Grande,2016,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
-2020,America/Cuiaba,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
-2021,America/Cuiaba,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
-2022,America/Cuiaba,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
-2023,America/Cuiaba,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
-2024,America/Cuiaba,1988,Brazil,-240,60,10,16,-1,0,-4:00,2,7,-1,0,-5:00
-2025,America/Cuiaba,1989,Brazil,-240,60,10,15,-1,0,-4:00,1,29,-1,0,-5:00
-2026,America/Cuiaba,1990,Brazil,-240,60,10,21,-1,0,-4:00,2,11,-1,0,-5:00
-2027,America/Cuiaba,1991,Brazil,-240,60,10,20,-1,0,-4:00,2,17,-1,0,-5:00
-2028,America/Cuiaba,1992,Brazil,-240,60,10,25,-1,0,-4:00,2,9,-1,0,-5:00
-2029,America/Cuiaba,1993,Brazil,-240,60,10,11,0,0,-4:00,1,31,-1,0,-5:00
-2030,America/Cuiaba,1994,Brazil,-240,60,10,11,0,0,-4:00,2,15,0,0,-5:00
-2031,America/Cuiaba,1996,Brazil,-240,60,10,6,-1,0,-4:00,2,11,-1,0,-5:00
-2032,America/Cuiaba,1997,Brazil,-240,60,10,6,-1,0,-4:00,2,16,-1,0,-5:00
-2033,America/Cuiaba,1998,Brazil,-240,60,10,11,-1,0,-4:00,3,1,-1,0,-5:00
-2034,America/Cuiaba,1999,Brazil,-240,60,10,3,-1,0,-4:00,2,21,-1,0,-5:00
-2035,America/Cuiaba,2000,Brazil,-240,60,10,8,0,0,-4:00,2,27,-1,0,-5:00
-2036,America/Cuiaba,2001,Brazil,-240,60,10,8,0,0,-4:00,2,15,0,0,-5:00
-2037,America/Cuiaba,2002,Brazil,-240,60,11,3,-1,0,-4:00,2,15,0,0,-5:00
-2038,America/Cuiaba,2003,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2039,America/Cuiaba,2004,Brazil,-240,60,11,2,-1,0,-4:00,2,15,0,0,-5:00
-2040,America/Cuiaba,2005,Brazil,-240,60,10,16,-1,0,-4:00,2,15,0,0,-5:00
-2041,America/Cuiaba,2006,Brazil,-240,60,11,5,-1,0,-4:00,2,15,0,0,-5:00
-2042,America/Cuiaba,2007,Brazil,-240,60,10,8,0,0,-4:00,2,25,-1,0,-5:00
-2043,America/Cuiaba,2008,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
-2044,America/Cuiaba,2012,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
-2045,America/Cuiaba,2013,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
-2046,America/Cuiaba,2015,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
-2047,America/Cuiaba,2016,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
-2048,America/Porto_Velho,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
-2049,America/Porto_Velho,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
-2050,America/Porto_Velho,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
-2051,America/Porto_Velho,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
-2052,America/Porto_Velho,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2053,America/Boa_Vista,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
-2054,America/Boa_Vista,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
-2055,America/Boa_Vista,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
-2056,America/Boa_Vista,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
-2057,America/Boa_Vista,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2058,America/Boa_Vista,1999,Brazil,-240,60,10,3,-1,0,-4:00,2,21,-1,0,-5:00
-2059,America/Boa_Vista,2000,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2060,America/Manaus,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
-2061,America/Manaus,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
-2062,America/Manaus,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
-2063,America/Manaus,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
-2064,America/Manaus,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2065,America/Manaus,1993,Brazil,-240,60,10,11,0,0,-4:00,1,31,-1,0,-5:00
-2066,America/Manaus,1994,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2067,America/Eirunepe,1970,Brazil,-300,0,12,31,-1,0,07:00,3,1,-1,0,-6:00
-2068,America/Eirunepe,1985,Brazil,-300,60,11,2,-1,0,-5:00,1,1,-1,0,06:00
-2069,America/Eirunepe,1986,Brazil,-300,60,10,25,-1,0,-5:00,3,15,-1,0,-6:00
-2070,America/Eirunepe,1987,Brazil,-300,60,10,25,-1,0,-5:00,2,14,-1,0,-6:00
-2071,America/Eirunepe,1988,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-2072,America/Eirunepe,1993,Brazil,-300,60,10,11,0,0,-5:00,1,31,-1,0,-6:00
-2073,America/Eirunepe,1994,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-2074,America/Eirunepe,2008,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2075,America/Rio_Branco,1970,Brazil,-300,0,12,31,-1,0,07:00,3,1,-1,0,-6:00
-2076,America/Rio_Branco,1985,Brazil,-300,60,11,2,-1,0,-5:00,1,1,-1,0,06:00
-2077,America/Rio_Branco,1986,Brazil,-300,60,10,25,-1,0,-5:00,3,15,-1,0,-6:00
-2078,America/Rio_Branco,1987,Brazil,-300,60,10,25,-1,0,-5:00,2,14,-1,0,-6:00
-2079,America/Rio_Branco,1988,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-2080,America/Rio_Branco,2008,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2081,America/Santiago,1970,Chile,-240,60,10,9,0,0,4:00,3,29,-1,0,3:00
-2082,America/Santiago,1971,Chile,-240,60,10,9,0,0,4:00,3,14,-1,0,3:00
-2083,America/Santiago,1972,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
-2084,America/Santiago,1973,Chile,-240,60,9,30,-1,0,4:00,3,9,0,0,3:00
-2085,America/Santiago,1974,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
-2086,America/Santiago,1987,Chile,-240,60,10,9,0,0,4:00,4,12,-1,0,3:00
-2087,America/Santiago,1988,Chile,-240,60,10,1,0,0,4:00,3,9,0,0,3:00
-2088,America/Santiago,1989,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
-2089,America/Santiago,1990,Chile,-240,60,9,16,-1,0,4:00,3,18,-1,0,3:00
-2090,America/Santiago,1991,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
-2091,America/Santiago,1997,Chile,-240,60,10,9,0,0,4:00,3,30,-1,0,3:00
-2092,America/Santiago,1998,Chile,-240,60,9,27,-1,0,4:00,3,9,0,0,3:00
-2093,America/Santiago,1999,Chile,-240,60,10,9,0,0,4:00,4,4,-1,0,3:00
-2094,America/Santiago,2000,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
-2095,America/Santiago,2008,Chile,-240,60,10,9,0,0,4:00,3,30,-1,0,3:00
-2096,America/Santiago,2009,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
-2097,America/Santiago,2010,Chile,-240,60,10,9,0,0,4:00,4,1,0,0,3:00
-2098,America/Santiago,2011,Chile,-240,60,8,16,0,0,4:00,5,2,0,0,3:00
-2099,America/Santiago,2012,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
-2100,Pacific/Easter,1970,Chile,-420,60,10,9,0,0,4:00,3,29,-1,0,3:00
-2101,Pacific/Easter,1971,Chile,-420,60,10,9,0,0,4:00,3,14,-1,0,3:00
-2102,Pacific/Easter,1972,Chile,-420,60,10,9,0,0,4:00,3,9,0,0,3:00
-2103,Pacific/Easter,1973,Chile,-420,60,9,30,-1,0,4:00,3,9,0,0,3:00
-2104,Pacific/Easter,1974,Chile,-420,60,10,9,0,0,4:00,3,9,0,0,3:00
-2105,Pacific/Easter,1982,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
-2106,Pacific/Easter,1987,Chile,-360,60,10,9,0,0,4:00,4,12,-1,0,3:00
-2107,Pacific/Easter,1988,Chile,-360,60,10,1,0,0,4:00,3,9,0,0,3:00
-2108,Pacific/Easter,1989,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
-2109,Pacific/Easter,1990,Chile,-360,60,9,16,-1,0,4:00,3,18,-1,0,3:00
-2110,Pacific/Easter,1991,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
-2111,Pacific/Easter,1997,Chile,-360,60,10,9,0,0,4:00,3,30,-1,0,3:00
-2112,Pacific/Easter,1998,Chile,-360,60,9,27,-1,0,4:00,3,9,0,0,3:00
-2113,Pacific/Easter,1999,Chile,-360,60,10,9,0,0,4:00,4,4,-1,0,3:00
-2114,Pacific/Easter,2000,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
-2115,Pacific/Easter,2008,Chile,-360,60,10,9,0,0,4:00,3,30,-1,0,3:00
-2116,Pacific/Easter,2009,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
-2117,Pacific/Easter,2010,Chile,-360,60,10,9,0,0,4:00,4,1,0,0,3:00
-2118,Pacific/Easter,2011,Chile,-360,60,8,16,0,0,4:00,5,2,0,0,3:00
-2119,Pacific/Easter,2012,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
-2120,America/Bogota,1970,CO,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-2121,America/Bogota,1992,CO,-300,60,5,3,-1,0,-5:00,1,1,-1,0,06:00
-2122,America/Bogota,1993,CO,-300,0,12,31,-1,0,07:00,4,4,-1,0,-6:00
-2123,America/Curacao,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2124,America/Guayaquil,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-2125,Pacific/Galapagos,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
-2126,Pacific/Galapagos,1986,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
-2127,Atlantic/Stanley,1970,Falk,-240,0,12,31,-1,0,08:00,1,1,-1,0,-5:00
-2128,Atlantic/Stanley,1983,Falk,-180,60,9,-1,0,0,-3:00,1,1,-1,0,08:00
-2129,Atlantic/Stanley,1984,Falk,-180,60,9,16,-1,0,-3:00,4,-1,0,0,-4:00
-2130,Atlantic/Stanley,1985,Falk,-240,60,9,9,0,0,-4:00,4,-1,0,0,-5:00
-2131,Atlantic/Stanley,1986,Falk,-240,60,9,9,0,0,-4:00,4,16,0,0,-5:00
-2132,Atlantic/Stanley,2001,Falk,-240,60,9,1,0,0,-2:00,4,15,0,0,-3:00
-2133,Atlantic/Stanley,2011,Falk,-240,60,9,1,0,0,-2:00,1,1,-1,0,07:00
-2134,Atlantic/Stanley,2012,Falk,-240,60,9,1,0,0,-2:00,4,15,0,0,-3:00
-2135,America/Cayenne,1970,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-2136,America/Guyana,1970,,-225,0,0,0,0,0,00:00,0,0,0,0,00:00
-2137,America/Guyana,1975,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-2138,America/Guyana,1991,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2139,America/Asuncion,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2140,America/Asuncion,1972,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-2141,America/Asuncion,1974,Para,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2142,America/Asuncion,1975,Para,-240,60,10,1,-1,0,-4:00,3,1,-1,0,-5:00
-2143,America/Asuncion,1979,Para,-240,60,10,1,-1,0,-4:00,4,1,-1,0,-5:00
-2144,America/Asuncion,1989,Para,-240,60,10,22,-1,0,-4:00,4,1,-1,0,-5:00
-2145,America/Asuncion,1990,Para,-240,60,10,1,-1,0,-4:00,4,1,-1,0,-5:00
-2146,America/Asuncion,1991,Para,-240,60,10,6,-1,0,-4:00,4,1,-1,0,-5:00
-2147,America/Asuncion,1992,Para,-240,60,10,5,-1,0,-4:00,3,1,-1,0,-5:00
-2148,America/Asuncion,1993,Para,-240,60,10,1,-1,0,-4:00,3,31,-1,0,-5:00
-2149,America/Asuncion,1994,Para,-240,60,10,1,-1,0,-4:00,2,-1,0,0,-5:00
-2150,America/Asuncion,1996,Para,-240,60,10,1,0,0,-4:00,3,1,-1,0,-5:00
-2151,America/Asuncion,1997,Para,-240,60,10,1,0,0,-4:00,2,-1,0,0,-5:00
-2152,America/Asuncion,1998,Para,-240,60,10,1,0,0,-4:00,3,1,0,0,-5:00
-2153,America/Asuncion,2002,Para,-240,60,9,1,0,0,-4:00,4,1,0,0,-5:00
-2154,America/Asuncion,2004,Para,-240,60,10,15,0,0,-4:00,4,1,0,0,-5:00
-2155,America/Asuncion,2005,Para,-240,60,10,15,0,0,-4:00,3,8,0,0,-5:00
-2156,America/Asuncion,2010,Para,-240,60,10,1,0,0,-4:00,4,8,0,0,-5:00
-2157,America/Lima,1970,Peru,-300,0,12,31,-1,0,07:00,3,24,0,0,-6:00
-2158,America/Lima,1986,Peru,-300,60,1,1,-1,0,-5:00,4,1,-1,0,-6:00
-2159,America/Lima,1995,Peru,-300,0,1,1,-1,0,-5:00,4,1,-1,0,-6:00
-2160,Atlantic/South_Georgia,1970,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
-2161,America/Paramaribo,1970,,-210,0,0,0,0,0,00:00,0,0,0,0,00:00
-2162,America/Paramaribo,1975,,-210,0,0,0,0,0,00:00,0,0,0,0,00:00
-2163,America/Paramaribo,1984,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
-2164,America/Port_of_Spain,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2165,America/Montevideo,1970,Uruguay,-180,30,5,27,-1,0,-3:00,12,2,-1,0,-4:00
-2166,America/Montevideo,1972,Uruguay,-180,60,4,24,-1,0,-3:00,8,15,-1,0,-4:00
-2167,America/Montevideo,1974,Uruguay,-180,60,12,22,-1,0,-3:00,1,1,-1,0,08:00
-2168,America/Montevideo,1976,Uruguay,-180,0,12,31,-1,0,09:00,10,1,-1,0,-4:00
-2169,America/Montevideo,1977,Uruguay,-180,60,12,4,-1,0,-3:00,1,1,-1,0,08:00
-2170,America/Montevideo,1978,Uruguay,-180,0,12,31,-1,0,09:00,4,1,-1,0,-4:00
-2171,America/Montevideo,1979,Uruguay,-180,60,10,1,-1,0,-3:00,1,1,-1,0,08:00
-2172,America/Montevideo,1980,Uruguay,-180,0,12,31,-1,0,09:00,5,1,-1,0,-4:00
-2173,America/Montevideo,1987,Uruguay,-180,60,12,14,-1,0,-3:00,1,1,-1,0,08:00
-2174,America/Montevideo,1988,Uruguay,-180,60,12,11,-1,0,-3:00,3,14,-1,0,-4:00
-2175,America/Montevideo,1989,Uruguay,-180,60,10,29,-1,0,-3:00,3,12,-1,0,-4:00
-2176,America/Montevideo,1990,Uruguay,-180,60,10,21,0,0,-3:00,3,1,0,0,-4:00
-2177,America/Montevideo,1992,Uruguay,-180,60,10,18,-1,0,-3:00,3,1,0,0,-4:00
-2178,America/Montevideo,1993,Uruguay,-180,0,12,31,-1,0,09:00,2,28,-1,0,-4:00
-2179,America/Montevideo,2004,Uruguay,-180,60,9,19,-1,0,-3:00,1,1,-1,0,08:00
-2180,America/Montevideo,2005,Uruguay,-180,60,10,9,-1,0,-1:00,3,27,-1,0,-2:00
-2181,America/Montevideo,2006,Uruguay,-180,60,10,1,0,0,-1:00,3,12,-1,0,-2:00
-2182,America/Montevideo,2007,Uruguay,-180,60,10,1,0,0,-1:00,3,8,0,0,-2:00
-2183,America/Caracas,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
-2184,America/Caracas,2007,,-270,0,0,0,0,0,00:00,0,0,0,0,00:00
+1051,Europe/Kaliningrad,2011,,180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1052,Europe/Moscow,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
+1053,Europe/Moscow,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
+1054,Europe/Moscow,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
+1055,Europe/Moscow,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1056,Europe/Moscow,1991,Russia,120,60,3,-1,0,0,04:00,9,-1,0,0,04:00
+1057,Europe/Moscow,1992,Russia,180,60,3,-1,6,0,26:00,9,-1,6,0,25:00
+1058,Europe/Moscow,1993,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1059,Europe/Moscow,1996,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
+1060,Europe/Moscow,2011,,240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1061,Europe/Volgograd,1970,Russia,240,60,9,1,-1,0,04:00,10,1,-1,0,03:00
+1062,Europe/Volgograd,1981,Russia,240,60,4,1,-1,0,04:00,10,1,-1,0,03:00
+1063,Europe/Volgograd,1984,Russia,240,60,4,1,-1,0,04:00,9,-1,0,0,06:00
+1064,Europe/Volgograd,1985,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
+1065,Europe/Volgograd,1989,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1066,Europe/Volgograd,1991,,240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1067,Europe/Volgograd,1992,Russia,180,60,3,-1,6,0,26:00,9,-1,6,0,25:00
+1068,Europe/Volgograd,1993,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1069,Europe/Volgograd,1996,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
+1070,Europe/Volgograd,2011,,240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1071,Europe/Samara,1970,Russia,240,60,9,1,-1,0,04:00,10,1,-1,0,03:00
+1072,Europe/Samara,1981,Russia,240,60,4,1,-1,0,04:00,10,1,-1,0,03:00
+1073,Europe/Samara,1984,Russia,240,60,4,1,-1,0,04:00,9,-1,0,0,06:00
+1074,Europe/Samara,1985,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
+1075,Europe/Samara,1989,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1076,Europe/Samara,1991,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
+1077,Europe/Samara,1992,Russia,240,60,3,-1,6,0,27:00,9,-1,6,0,26:00
+1078,Europe/Samara,1993,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
+1079,Europe/Samara,1996,Russia,240,60,3,-1,0,0,06:00,10,-1,0,0,06:00
+1080,Europe/Samara,2010,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
+1081,Europe/Samara,2011,,240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1082,Asia/Yekaterinburg,1970,Russia,300,60,9,1,-1,0,05:00,10,1,-1,0,04:00
+1083,Asia/Yekaterinburg,1981,Russia,300,60,4,1,-1,0,05:00,10,1,-1,0,04:00
+1084,Asia/Yekaterinburg,1984,Russia,300,60,4,1,-1,0,05:00,9,-1,0,0,07:00
+1085,Asia/Yekaterinburg,1985,Russia,300,60,3,-1,0,0,07:00,9,-1,0,0,07:00
+1086,Asia/Yekaterinburg,1991,Russia,240,60,3,-1,0,0,06:00,9,-1,0,0,06:00
+1087,Asia/Yekaterinburg,1992,Russia,300,60,3,-1,6,0,28:00,9,-1,6,0,27:00
+1088,Asia/Yekaterinburg,1993,Russia,300,60,3,-1,0,0,07:00,9,-1,0,0,07:00
+1089,Asia/Yekaterinburg,1996,Russia,300,60,3,-1,0,0,07:00,10,-1,0,0,07:00
+1090,Asia/Yekaterinburg,2011,,360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1091,Asia/Omsk,1970,Russia,360,60,9,1,-1,0,06:00,10,1,-1,0,05:00
+1092,Asia/Omsk,1981,Russia,360,60,4,1,-1,0,06:00,10,1,-1,0,05:00
+1093,Asia/Omsk,1984,Russia,360,60,4,1,-1,0,06:00,9,-1,0,0,08:00
+1094,Asia/Omsk,1985,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
+1095,Asia/Omsk,1991,Russia,300,60,3,-1,0,0,07:00,9,-1,0,0,07:00
+1096,Asia/Omsk,1992,Russia,360,60,3,-1,6,0,29:00,9,-1,6,0,28:00
+1097,Asia/Omsk,1993,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
+1098,Asia/Omsk,1996,Russia,360,60,3,-1,0,0,08:00,10,-1,0,0,08:00
+1099,Asia/Omsk,2011,,420,0,0,0,0,0,00:00,0,0,0,0,00:00
+1100,Asia/Novosibirsk,1970,Russia,420,60,9,1,-1,0,07:00,10,1,-1,0,06:00
+1101,Asia/Novosibirsk,1981,Russia,420,60,4,1,-1,0,07:00,10,1,-1,0,06:00
+1102,Asia/Novosibirsk,1984,Russia,420,60,4,1,-1,0,07:00,9,-1,0,0,09:00
+1103,Asia/Novosibirsk,1985,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
+1104,Asia/Novosibirsk,1991,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
+1105,Asia/Novosibirsk,1992,Russia,420,60,3,-1,6,0,30:00,9,-1,6,0,29:00
+1106,Asia/Novosibirsk,1993,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
+1107,Asia/Novosibirsk,1996,Russia,360,60,3,-1,0,0,08:00,10,-1,0,0,08:00
+1108,Asia/Novosibirsk,2011,,420,0,0,0,0,0,00:00,0,0,0,0,00:00
+1109,Asia/Novokuznetsk,1970,Russia,420,60,9,1,-1,0,07:00,10,1,-1,0,06:00
+1110,Asia/Novokuznetsk,1981,Russia,420,60,4,1,-1,0,07:00,10,1,-1,0,06:00
+1111,Asia/Novokuznetsk,1984,Russia,420,60,4,1,-1,0,07:00,9,-1,0,0,09:00
+1112,Asia/Novokuznetsk,1985,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
+1113,Asia/Novokuznetsk,1991,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
+1114,Asia/Novokuznetsk,1992,Russia,420,60,3,-1,6,0,30:00,9,-1,6,0,29:00
+1115,Asia/Novokuznetsk,1993,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
+1116,Asia/Novokuznetsk,1996,Russia,420,60,3,-1,0,0,09:00,10,-1,0,0,09:00
+1117,Asia/Novokuznetsk,2010,Russia,360,60,3,-1,0,0,08:00,10,-1,0,0,08:00
+1118,Asia/Novokuznetsk,2011,,420,0,0,0,0,0,00:00,0,0,0,0,00:00
+1119,Asia/Krasnoyarsk,1970,Russia,420,60,9,1,-1,0,07:00,10,1,-1,0,06:00
+1120,Asia/Krasnoyarsk,1981,Russia,420,60,4,1,-1,0,07:00,10,1,-1,0,06:00
+1121,Asia/Krasnoyarsk,1984,Russia,420,60,4,1,-1,0,07:00,9,-1,0,0,09:00
+1122,Asia/Krasnoyarsk,1985,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
+1123,Asia/Krasnoyarsk,1991,Russia,360,60,3,-1,0,0,08:00,9,-1,0,0,08:00
+1124,Asia/Krasnoyarsk,1992,Russia,420,60,3,-1,6,0,30:00,9,-1,6,0,29:00
+1125,Asia/Krasnoyarsk,1993,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
+1126,Asia/Krasnoyarsk,1996,Russia,420,60,3,-1,0,0,09:00,10,-1,0,0,09:00
+1127,Asia/Krasnoyarsk,2011,,480,0,0,0,0,0,00:00,0,0,0,0,00:00
+1128,Asia/Irkutsk,1970,Russia,480,60,9,1,-1,0,08:00,10,1,-1,0,07:00
+1129,Asia/Irkutsk,1981,Russia,480,60,4,1,-1,0,08:00,10,1,-1,0,07:00
+1130,Asia/Irkutsk,1984,Russia,480,60,4,1,-1,0,08:00,9,-1,0,0,10:00
+1131,Asia/Irkutsk,1985,Russia,480,60,3,-1,0,0,10:00,9,-1,0,0,10:00
+1132,Asia/Irkutsk,1991,Russia,420,60,3,-1,0,0,09:00,9,-1,0,0,09:00
+1133,Asia/Irkutsk,1992,Russia,480,60,3,-1,6,0,31:00,9,-1,6,0,30:00
+1134,Asia/Irkutsk,1993,Russia,480,60,3,-1,0,0,10:00,9,-1,0,0,10:00
+1135,Asia/Irkutsk,1996,Russia,480,60,3,-1,0,0,10:00,10,-1,0,0,10:00
+1136,Asia/Irkutsk,2011,,540,0,0,0,0,0,00:00,0,0,0,0,00:00
+1137,Asia/Yakutsk,1970,Russia,540,60,9,1,-1,0,09:00,10,1,-1,0,08:00
+1138,Asia/Yakutsk,1981,Russia,540,60,4,1,-1,0,09:00,10,1,-1,0,08:00
+1139,Asia/Yakutsk,1984,Russia,540,60,4,1,-1,0,09:00,9,-1,0,0,11:00
+1140,Asia/Yakutsk,1985,Russia,540,60,3,-1,0,0,11:00,9,-1,0,0,11:00
+1141,Asia/Yakutsk,1991,Russia,480,60,3,-1,0,0,10:00,9,-1,0,0,10:00
+1142,Asia/Yakutsk,1992,Russia,540,60,3,-1,6,0,32:00,9,-1,6,0,31:00
+1143,Asia/Yakutsk,1993,Russia,540,60,3,-1,0,0,11:00,9,-1,0,0,11:00
+1144,Asia/Yakutsk,1996,Russia,540,60,3,-1,0,0,11:00,10,-1,0,0,11:00
+1145,Asia/Yakutsk,2011,,600,0,0,0,0,0,00:00,0,0,0,0,00:00
+1146,Asia/Vladivostok,1970,Russia,600,60,9,1,-1,0,10:00,10,1,-1,0,09:00
+1147,Asia/Vladivostok,1981,Russia,600,60,4,1,-1,0,10:00,10,1,-1,0,09:00
+1148,Asia/Vladivostok,1984,Russia,600,60,4,1,-1,0,10:00,9,-1,0,0,12:00
+1149,Asia/Vladivostok,1985,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
+1150,Asia/Vladivostok,1991,Russia,540,60,3,-1,0,0,11:00,9,-1,0,0,11:00
+1151,Asia/Vladivostok,1992,Russia,600,60,3,-1,6,0,33:00,9,-1,6,0,32:00
+1152,Asia/Vladivostok,1993,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
+1153,Asia/Vladivostok,1996,Russia,600,60,3,-1,0,0,12:00,10,-1,0,0,12:00
+1154,Asia/Vladivostok,2011,,660,0,0,0,0,0,00:00,0,0,0,0,00:00
+1155,Asia/Sakhalin,1970,Russia,660,60,9,1,-1,0,11:00,10,1,-1,0,10:00
+1156,Asia/Sakhalin,1981,Russia,660,60,4,1,-1,0,11:00,10,1,-1,0,10:00
+1157,Asia/Sakhalin,1984,Russia,660,60,4,1,-1,0,11:00,9,-1,0,0,13:00
+1158,Asia/Sakhalin,1985,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
+1159,Asia/Sakhalin,1991,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
+1160,Asia/Sakhalin,1992,Russia,660,60,3,-1,6,0,34:00,9,-1,6,0,33:00
+1161,Asia/Sakhalin,1993,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
+1162,Asia/Sakhalin,1996,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
+1163,Asia/Sakhalin,1997,Russia,600,60,3,-1,0,0,12:00,10,-1,0,0,12:00
+1164,Asia/Sakhalin,2011,,660,0,0,0,0,0,00:00,0,0,0,0,00:00
+1165,Asia/Magadan,1970,Russia,660,60,9,1,-1,0,11:00,10,1,-1,0,10:00
+1166,Asia/Magadan,1981,Russia,660,60,4,1,-1,0,11:00,10,1,-1,0,10:00
+1167,Asia/Magadan,1984,Russia,660,60,4,1,-1,0,11:00,9,-1,0,0,13:00
+1168,Asia/Magadan,1985,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
+1169,Asia/Magadan,1991,Russia,600,60,3,-1,0,0,12:00,9,-1,0,0,12:00
+1170,Asia/Magadan,1992,Russia,660,60,3,-1,6,0,34:00,9,-1,6,0,33:00
+1171,Asia/Magadan,1993,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
+1172,Asia/Magadan,1996,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
+1173,Asia/Magadan,2011,,720,0,0,0,0,0,00:00,0,0,0,0,00:00
+1174,Asia/Kamchatka,1970,Russia,720,60,9,1,-1,0,12:00,10,1,-1,0,11:00
+1175,Asia/Kamchatka,1981,Russia,720,60,4,1,-1,0,12:00,10,1,-1,0,11:00
+1176,Asia/Kamchatka,1984,Russia,720,60,4,1,-1,0,12:00,9,-1,0,0,14:00
+1177,Asia/Kamchatka,1985,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
+1178,Asia/Kamchatka,1991,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
+1179,Asia/Kamchatka,1992,Russia,720,60,3,-1,6,0,35:00,9,-1,6,0,34:00
+1180,Asia/Kamchatka,1993,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
+1181,Asia/Kamchatka,1996,Russia,720,60,3,-1,0,0,14:00,10,-1,0,0,14:00
+1182,Asia/Kamchatka,2010,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
+1183,Asia/Kamchatka,2011,,720,0,0,0,0,0,00:00,0,0,0,0,00:00
+1184,Asia/Anadyr,1970,Russia,780,60,9,1,-1,0,13:00,10,1,-1,0,12:00
+1185,Asia/Anadyr,1981,Russia,780,60,4,1,-1,0,13:00,10,1,-1,0,12:00
+1186,Asia/Anadyr,1982,Russia,720,60,4,1,-1,0,12:00,10,1,-1,0,11:00
+1187,Asia/Anadyr,1984,Russia,720,60,4,1,-1,0,12:00,9,-1,0,0,14:00
+1188,Asia/Anadyr,1985,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
+1189,Asia/Anadyr,1991,Russia,660,60,3,-1,0,0,13:00,9,-1,0,0,13:00
+1190,Asia/Anadyr,1992,Russia,720,60,3,-1,6,0,35:00,9,-1,6,0,34:00
+1191,Asia/Anadyr,1993,Russia,720,60,3,-1,0,0,14:00,9,-1,0,0,14:00
+1192,Asia/Anadyr,1996,Russia,720,60,3,-1,0,0,14:00,10,-1,0,0,14:00
+1193,Asia/Anadyr,2010,Russia,660,60,3,-1,0,0,13:00,10,-1,0,0,13:00
+1194,Asia/Anadyr,2011,,720,0,0,0,0,0,00:00,0,0,0,0,00:00
+1195,Europe/Belgrade,1970,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
+1196,Europe/Belgrade,1982,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1197,Europe/Belgrade,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1198,Europe/Madrid,1970,Spain,60,60,4,30,-1,0,24:00,9,30,-1,0,01:00
+1199,Europe/Madrid,1974,Spain,60,60,4,13,6,0,24:00,10,1,0,0,01:00
+1200,Europe/Madrid,1976,Spain,60,60,3,27,-1,0,24:00,9,-1,0,0,01:00
+1201,Europe/Madrid,1977,Spain,60,60,4,2,-1,0,24:00,9,-1,0,0,01:00
+1202,Europe/Madrid,1978,Spain,60,60,4,2,-1,0,24:00,10,1,-1,0,01:00
+1203,Europe/Madrid,1979,EU,60,60,4,1,0,0,1:00,9,-1,0,0,1:00
+1204,Europe/Madrid,1981,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1205,Europe/Madrid,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1206,Africa/Ceuta,1970,SpainAfrica,0,60,6,3,-1,0,12:00,10,1,-1,0,-1:00
+1207,Africa/Ceuta,1974,SpainAfrica,0,60,6,24,-1,0,00:00,9,1,-1,0,-1:00
+1208,Africa/Ceuta,1976,SpainAfrica,0,60,5,1,-1,0,00:00,8,1,-1,0,-1:00
+1209,Africa/Ceuta,1977,SpainAfrica,0,60,5,1,-1,0,00:00,9,28,-1,0,-1:00
+1210,Africa/Ceuta,1978,SpainAfrica,0,60,6,1,-1,0,00:00,8,4,-1,0,-1:00
+1211,Africa/Ceuta,1979,SpainAfrica,0,0,6,1,-1,0,00:00,8,4,-1,0,-1:00
+1212,Africa/Ceuta,1984,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
+1213,Africa/Ceuta,1986,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1214,Africa/Ceuta,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1215,Atlantic/Canary,1970,,0,0,0,0,0,0,00:00,0,0,0,0,00:00
+1216,Atlantic/Canary,1980,EU,0,60,4,1,0,0,1:00,9,-1,0,0,1:00
+1217,Atlantic/Canary,1981,EU,0,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1218,Atlantic/Canary,1996,EU,0,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1219,Europe/Stockholm,1970,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
+1220,Europe/Stockholm,1980,EU,60,60,4,1,0,0,1:00,9,-1,0,0,1:00
+1221,Europe/Stockholm,1981,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1222,Europe/Stockholm,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1223,Europe/Zurich,1970,Swiss,60,0,5,1,1,0,02:00,10,1,1,0,02:00
+1224,Europe/Zurich,1981,EU,60,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1225,Europe/Zurich,1996,EU,60,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1226,Europe/Istanbul,1970,Turkey,120,60,5,2,0,0,02:00,10,2,0,0,01:00
+1227,Europe/Istanbul,1973,Turkey,120,60,6,3,-1,0,03:00,11,4,-1,0,04:00
+1228,Europe/Istanbul,1974,Turkey,120,60,3,31,-1,0,04:00,11,3,-1,0,06:00
+1229,Europe/Istanbul,1975,Turkey,120,60,3,30,-1,0,02:00,10,-1,0,0,01:00
+1230,Europe/Istanbul,1976,Turkey,120,60,6,1,-1,0,02:00,10,-1,0,0,01:00
+1231,Europe/Istanbul,1977,Turkey,120,60,4,1,0,0,02:00,10,16,-1,0,01:00
+1232,Europe/Istanbul,1978,Turkey,180,60,4,1,0,0,03:00,1,1,-1,0,14:00
+1233,Europe/Istanbul,1979,Turkey,180,60,4,1,0,0,06:00,10,11,1,0,02:00
+1234,Europe/Istanbul,1981,Turkey,180,60,3,-1,0,0,06:00,10,11,1,0,02:00
+1235,Europe/Istanbul,1983,Turkey,180,60,7,31,-1,0,03:00,10,2,-1,0,02:00
+1236,Europe/Istanbul,1985,Turkey,120,60,4,20,-1,0,02:00,9,28,-1,0,01:00
+1237,Europe/Istanbul,1986,Turkey,120,60,3,-1,0,0,04:00,9,-1,0,0,04:00
+1238,Europe/Istanbul,1991,Turkey,120,60,3,-1,0,0,03:00,9,-1,0,0,03:00
+1239,Europe/Istanbul,1996,Turkey,120,60,3,-1,0,0,03:00,10,-1,0,0,03:00
+1240,Europe/Istanbul,2006,Turkey,120,0,3,-1,0,0,03:00,10,-1,0,0,03:00
+1241,Europe/Istanbul,2007,EU,120,0,3,-1,0,0,03:00,10,-1,0,0,03:00
+1242,Europe/Kiev,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
+1243,Europe/Kiev,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
+1244,Europe/Kiev,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
+1245,Europe/Kiev,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1246,Europe/Kiev,1990,,120,0,0,0,0,0,00:00,0,0,0,0,00:00
+1247,Europe/Kiev,1992,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
+1248,Europe/Kiev,1995,EU,120,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1249,Europe/Kiev,1996,EU,120,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1250,Europe/Uzhgorod,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
+1251,Europe/Uzhgorod,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
+1252,Europe/Uzhgorod,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
+1253,Europe/Uzhgorod,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1254,Europe/Uzhgorod,1990,,60,0,0,0,0,0,00:00,0,0,0,0,00:00
+1255,Europe/Uzhgorod,1991,,120,0,0,0,0,0,00:00,0,0,0,0,00:00
+1256,Europe/Uzhgorod,1992,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
+1257,Europe/Uzhgorod,1995,EU,120,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1258,Europe/Uzhgorod,1996,EU,120,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1259,Europe/Zaporozhye,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
+1260,Europe/Zaporozhye,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
+1261,Europe/Zaporozhye,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
+1262,Europe/Zaporozhye,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1263,Europe/Zaporozhye,1991,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
+1264,Europe/Zaporozhye,1995,EU,120,60,3,-1,0,0,1:00,9,-1,0,0,1:00
+1265,Europe/Zaporozhye,1996,EU,120,60,3,-1,0,0,1:00,10,-1,0,0,1:00
+1266,Europe/Simferopol,1970,Russia,180,60,9,1,-1,0,03:00,10,1,-1,0,02:00
+1267,Europe/Simferopol,1981,Russia,180,60,4,1,-1,0,03:00,10,1,-1,0,02:00
+1268,Europe/Simferopol,1984,Russia,180,60,4,1,-1,0,03:00,9,-1,0,0,05:00
+1269,Europe/Simferopol,1985,Russia,180,60,3,-1,0,0,05:00,9,-1,0,0,05:00
+1270,Europe/Simferopol,1990,,120,0,0,0,0,0,00:00,0,0,0,0,00:00
+1271,Europe/Simferopol,1992,E-Eur,120,60,3,-1,0,0,02:00,9,-1,0,0,01:00
+1272,Europe/Simferopol,1994,E-Eur,180,60,3,-1,0,0,03:00,9,-1,0,0,02:00
+1273,Europe/Simferopol,1996,Russia,180,60,3,-1,0,0,05:00,10,-1,0,0,05:00
+1274,Europe/Simferopol,1997,EU,120,60,3,-1,0,0,04:00,10,-1,0,0,04:00
+1275,EST,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1276,MST,1970,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
+1277,HST,1970,,-600,0,0,0,0,0,00:00,0,0,0,0,00:00
+1278,EST5EDT,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1279,EST5EDT,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
+1280,EST5EDT,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
+1281,EST5EDT,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1282,EST5EDT,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1283,EST5EDT,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1284,CST6CDT,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1285,CST6CDT,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
+1286,CST6CDT,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
+1287,CST6CDT,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1288,CST6CDT,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1289,CST6CDT,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1290,MST7MDT,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1291,MST7MDT,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
+1292,MST7MDT,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
+1293,MST7MDT,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1294,MST7MDT,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1295,MST7MDT,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1296,PST8PDT,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1297,PST8PDT,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
+1298,PST8PDT,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
+1299,PST8PDT,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1300,PST8PDT,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1301,PST8PDT,2007,US,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
+1302,America/New_York,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1303,America/New_York,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
+1304,America/New_York,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
+1305,America/New_York,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1306,America/New_York,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1307,America/New_York,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1308,America/Chicago,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1309,America/Chicago,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
+1310,America/Chicago,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
+1311,America/Chicago,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1312,America/Chicago,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1313,America/Chicago,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1314,America/North_Dakota/Center,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1315,America/North_Dakota/Center,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
+1316,America/North_Dakota/Center,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
+1317,America/North_Dakota/Center,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1318,America/North_Dakota/Center,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1319,America/North_Dakota/Center,1992,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1320,America/North_Dakota/Center,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1321,America/North_Dakota/New_Salem,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1322,America/North_Dakota/New_Salem,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
+1323,America/North_Dakota/New_Salem,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
+1324,America/North_Dakota/New_Salem,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1325,America/North_Dakota/New_Salem,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1326,America/North_Dakota/New_Salem,2003,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1327,America/North_Dakota/New_Salem,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1328,America/North_Dakota/Beulah,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1329,America/North_Dakota/Beulah,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
+1330,America/North_Dakota/Beulah,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
+1331,America/North_Dakota/Beulah,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1332,America/North_Dakota/Beulah,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1333,America/North_Dakota/Beulah,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1334,America/North_Dakota/Beulah,2010,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1335,America/Denver,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1336,America/Denver,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
+1337,America/Denver,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
+1338,America/Denver,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1339,America/Denver,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1340,America/Denver,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1341,America/Los_Angeles,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1342,America/Los_Angeles,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
+1343,America/Los_Angeles,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
+1344,America/Los_Angeles,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1345,America/Los_Angeles,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1346,America/Los_Angeles,2007,US,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
+1347,America/Juneau,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1348,America/Juneau,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
+1349,America/Juneau,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
+1350,America/Juneau,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1351,America/Juneau,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
+1352,America/Juneau,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
+1353,America/Juneau,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
+1354,America/Sitka,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1355,America/Sitka,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
+1356,America/Sitka,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
+1357,America/Sitka,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1358,America/Sitka,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
+1359,America/Sitka,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
+1360,America/Sitka,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
+1361,America/Metlakatla,1970,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1362,America/Metlakatla,1974,US,-480,60,1,6,-1,0,-6:00,10,-1,0,0,-7:00
+1363,America/Metlakatla,1975,US,-480,60,2,23,-1,0,-6:00,10,-1,0,0,-7:00
+1364,America/Metlakatla,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1365,America/Metlakatla,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1366,America/Metlakatla,2007,US,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
+1367,America/Yakutat,1970,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
+1368,America/Yakutat,1974,US,-540,60,1,6,-1,0,-7:00,10,-1,0,0,-8:00
+1369,America/Yakutat,1975,US,-540,60,2,23,-1,0,-7:00,10,-1,0,0,-8:00
+1370,America/Yakutat,1976,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
+1371,America/Yakutat,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
+1372,America/Yakutat,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
+1373,America/Anchorage,1970,US,-600,60,4,-1,0,0,-8:00,10,-1,0,0,-9:00
+1374,America/Anchorage,1974,US,-600,60,1,6,-1,0,-8:00,10,-1,0,0,-9:00
+1375,America/Anchorage,1975,US,-600,60,2,23,-1,0,-8:00,10,-1,0,0,-9:00
+1376,America/Anchorage,1976,US,-600,60,4,-1,0,0,-8:00,10,-1,0,0,-9:00
+1377,America/Anchorage,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
+1378,America/Anchorage,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
+1379,America/Anchorage,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
+1380,America/Nome,1970,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
+1381,America/Nome,1974,US,-660,60,1,6,-1,0,-9:00,10,-1,0,0,-10:00
+1382,America/Nome,1975,US,-660,60,2,23,-1,0,-9:00,10,-1,0,0,-10:00
+1383,America/Nome,1976,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
+1384,America/Nome,1983,US,-540,60,4,-1,0,0,-7:00,10,-1,0,0,-8:00
+1385,America/Nome,1987,US,-540,60,4,1,0,0,-7:00,10,-1,0,0,-8:00
+1386,America/Nome,2007,US,-540,60,3,8,0,0,-7:00,11,1,0,0,-8:00
+1387,America/Adak,1970,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
+1388,America/Adak,1974,US,-660,60,1,6,-1,0,-9:00,10,-1,0,0,-10:00
+1389,America/Adak,1975,US,-660,60,2,23,-1,0,-9:00,10,-1,0,0,-10:00
+1390,America/Adak,1976,US,-660,60,4,-1,0,0,-9:00,10,-1,0,0,-10:00
+1391,America/Adak,1983,US,-600,60,4,-1,0,0,-8:00,10,-1,0,0,-9:00
+1392,America/Adak,1987,US,-600,60,4,1,0,0,-8:00,10,-1,0,0,-9:00
+1393,America/Adak,2007,US,-600,60,3,8,0,0,-8:00,11,1,0,0,-9:00
+1394,Pacific/Honolulu,1970,,-600,0,0,0,0,0,00:00,0,0,0,0,00:00
+1395,America/Phoenix,1970,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
+1396,America/Boise,1970,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1397,America/Boise,1974,US,-420,60,1,6,-1,0,-5:00,10,-1,0,0,-6:00
+1398,America/Boise,1975,US,-420,60,2,23,-1,0,-5:00,10,-1,0,0,-6:00
+1399,America/Boise,1976,US,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1400,America/Boise,1987,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1401,America/Boise,2007,US,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1402,America/Indiana/Indianapolis,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1403,America/Indiana/Indianapolis,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1404,America/Indiana/Indianapolis,2006,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1405,America/Indiana/Indianapolis,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1406,America/Indiana/Marengo,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1407,America/Indiana/Marengo,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
+1408,America/Indiana/Marengo,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
+1409,America/Indiana/Marengo,1976,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1410,America/Indiana/Marengo,2006,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1411,America/Indiana/Marengo,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1412,America/Indiana/Vincennes,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1413,America/Indiana/Vincennes,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1414,America/Indiana/Vincennes,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1415,America/Indiana/Vincennes,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1416,America/Indiana/Tell_City,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1417,America/Indiana/Tell_City,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1418,America/Indiana/Tell_City,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1419,America/Indiana/Tell_City,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1420,America/Indiana/Petersburg,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1421,America/Indiana/Petersburg,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
+1422,America/Indiana/Petersburg,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
+1423,America/Indiana/Petersburg,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1424,America/Indiana/Petersburg,1977,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1425,America/Indiana/Petersburg,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1426,America/Indiana/Petersburg,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1427,America/Indiana/Knox,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1428,America/Indiana/Knox,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
+1429,America/Indiana/Knox,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
+1430,America/Indiana/Knox,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1431,America/Indiana/Knox,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1432,America/Indiana/Knox,1991,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1433,America/Indiana/Knox,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1434,America/Indiana/Knox,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1435,America/Indiana/Winamac,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1436,America/Indiana/Winamac,1971,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1437,America/Indiana/Winamac,2006,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1438,America/Indiana/Winamac,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1439,America/Indiana/Vevay,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1440,America/Indiana/Vevay,1973,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1441,America/Indiana/Vevay,2006,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1442,America/Indiana/Vevay,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1443,America/Kentucky/Louisville,1970,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1444,America/Kentucky/Louisville,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
+1445,America/Kentucky/Louisville,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
+1446,America/Kentucky/Louisville,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1447,America/Kentucky/Louisville,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1448,America/Kentucky/Louisville,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1449,America/Kentucky/Monticello,1970,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1450,America/Kentucky/Monticello,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
+1451,America/Kentucky/Monticello,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
+1452,America/Kentucky/Monticello,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1453,America/Kentucky/Monticello,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1454,America/Kentucky/Monticello,2000,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1455,America/Kentucky/Monticello,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1456,America/Detroit,1970,Detroit,-300,0,6,14,-1,0,-3:00,10,-1,0,0,-4:00
+1457,America/Detroit,1973,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1458,America/Detroit,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
+1459,America/Detroit,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
+1460,America/Detroit,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1461,America/Detroit,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1462,America/Detroit,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1463,America/Menominee,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1464,America/Menominee,1973,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1465,America/Menominee,1974,US,-360,60,1,6,-1,0,-4:00,10,-1,0,0,-5:00
+1466,America/Menominee,1975,US,-360,60,2,23,-1,0,-4:00,10,-1,0,0,-5:00
+1467,America/Menominee,1976,US,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1468,America/Menominee,1987,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1469,America/Menominee,2007,US,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1470,America/St_Johns,1970,StJohns,-210,60,4,-1,0,0,-1:30,10,-1,0,0,-2:30
+1471,America/St_Johns,1987,StJohns,-210,60,4,1,0,0,-3:29,10,-1,0,0,-4:29
+1472,America/St_Johns,1988,StJohns,-210,120,4,1,0,0,-3:29,10,-1,0,0,-4:29
+1473,America/St_Johns,1989,StJohns,-210,60,4,1,0,0,-3:29,10,-1,0,0,-4:29
+1474,America/St_Johns,2007,StJohns,-210,60,3,8,0,0,-3:29,11,1,0,0,-4:29
+1475,America/Goose_Bay,1970,StJohns,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1476,America/Goose_Bay,1987,StJohns,-240,60,4,1,0,0,-3:59,10,-1,0,0,-4:59
+1477,America/Goose_Bay,1988,StJohns,-240,120,4,1,0,0,-3:59,10,-1,0,0,-4:59
+1478,America/Goose_Bay,1989,StJohns,-240,60,4,1,0,0,-3:59,10,-1,0,0,-4:59
+1479,America/Goose_Bay,2007,StJohns,-240,60,3,8,0,0,-3:59,11,1,0,0,-4:59
+1480,America/Halifax,1970,Halifax,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1481,America/Halifax,1973,Halifax,-240,0,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1482,America/Halifax,1974,Canada,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1483,America/Halifax,1987,Canada,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
+1484,America/Halifax,2007,Canada,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
+1485,America/Glace_Bay,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1486,America/Glace_Bay,1972,Halifax,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1487,America/Glace_Bay,1973,Halifax,-240,0,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1488,America/Glace_Bay,1974,Canada,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1489,America/Glace_Bay,1987,Canada,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
+1490,America/Glace_Bay,2007,Canada,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
+1491,America/Moncton,1970,Moncton,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1492,America/Moncton,1973,Canada,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1493,America/Moncton,1987,Canada,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
+1494,America/Moncton,1993,Moncton,-240,60,4,1,0,0,-3:59,10,-1,0,0,-4:59
+1495,America/Moncton,2006,Moncton,-240,0,4,1,0,0,-3:59,10,-1,0,0,-4:59
+1496,America/Moncton,2007,Canada,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
+1497,America/Blanc-Sablon,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1498,America/Montreal,1970,Mont,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1499,America/Montreal,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1500,America/Montreal,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1501,America/Montreal,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1502,America/Toronto,1970,Toronto,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1503,America/Toronto,1973,Toronto,-300,0,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1504,America/Toronto,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1505,America/Toronto,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1506,America/Toronto,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1507,America/Thunder_Bay,1970,Mont,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1508,America/Thunder_Bay,1973,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1509,America/Thunder_Bay,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1510,America/Thunder_Bay,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1511,America/Thunder_Bay,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1512,America/Nipigon,1970,Canada,-300,60,8,14,-1,0,23:00,9,30,-1,0,-4:00
+1513,America/Nipigon,1974,Canada,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1514,America/Nipigon,1987,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1515,America/Nipigon,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1516,America/Rainy_River,1970,Canada,-360,60,8,14,-1,0,23:00,9,30,-1,0,-5:00
+1517,America/Rainy_River,1974,Canada,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1518,America/Rainy_River,1987,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1519,America/Rainy_River,2007,Canada,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1520,America/Atikokan,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1521,America/Winnipeg,1970,Winn,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-4:00
+1522,America/Winnipeg,1987,Winn,-360,60,4,1,0,0,-4:00,10,-1,0,0,-4:00
+1523,America/Winnipeg,2005,Winn,-360,0,4,1,0,0,-4:00,10,-1,0,0,-4:00
+1524,America/Winnipeg,2006,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1525,America/Winnipeg,2007,Canada,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1526,America/Regina,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1527,America/Swift_Current,1970,Swift,-420,0,4,-1,0,0,-5:00,9,-1,0,0,-6:00
+1528,America/Swift_Current,1972,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1529,America/Edmonton,1970,Edm,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1530,America/Edmonton,1987,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1531,America/Edmonton,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1532,America/Vancouver,1970,Vanc,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1533,America/Vancouver,1987,Canada,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1534,America/Vancouver,2007,Canada,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
+1535,America/Dawson_Creek,1970,Vanc,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1536,America/Dawson_Creek,1972,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
+1537,America/Pangnirtung,1970,NT_YK,-240,120,4,-1,0,0,-4:00,10,-1,0,0,-3:00
+1538,America/Pangnirtung,1980,NT_YK,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1539,America/Pangnirtung,1987,NT_YK,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
+1540,America/Pangnirtung,1995,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1541,America/Pangnirtung,1999,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1542,America/Pangnirtung,2000,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1543,America/Pangnirtung,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1544,America/Iqaluit,1970,NT_YK,-300,120,4,-1,0,0,-5:00,10,-1,0,0,-4:00
+1545,America/Iqaluit,1980,NT_YK,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1546,America/Iqaluit,1987,NT_YK,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1547,America/Iqaluit,1999,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1548,America/Iqaluit,2000,Canada,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1549,America/Iqaluit,2007,Canada,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1550,America/Resolute,1970,NT_YK,-360,120,4,-1,0,0,-6:00,10,-1,0,0,-5:00
+1551,America/Resolute,1980,NT_YK,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1552,America/Resolute,1987,NT_YK,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1553,America/Resolute,2000,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1554,America/Resolute,2001,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1555,America/Resolute,2006,Resolute,-300,0,12,31,-1,0,07:00,11,1,0,0,-4:00
+1556,America/Resolute,2007,Resolute,-300,0,12,31,-1,0,07:00,3,8,0,0,-4:00
+1557,America/Rankin_Inlet,1970,NT_YK,-360,120,4,-1,0,0,-6:00,10,-1,0,0,-5:00
+1558,America/Rankin_Inlet,1980,NT_YK,-360,60,4,-1,0,0,-4:00,10,-1,0,0,-5:00
+1559,America/Rankin_Inlet,1987,NT_YK,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1560,America/Rankin_Inlet,2000,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1561,America/Rankin_Inlet,2001,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1562,America/Rankin_Inlet,2007,Canada,-360,60,3,8,0,0,-4:00,11,1,0,0,-5:00
+1563,America/Cambridge_Bay,1970,NT_YK,-420,120,4,-1,0,0,-7:00,10,-1,0,0,-6:00
+1564,America/Cambridge_Bay,1980,NT_YK,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1565,America/Cambridge_Bay,1987,NT_YK,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1566,America/Cambridge_Bay,1999,Canada,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1567,America/Cambridge_Bay,2000,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1568,America/Cambridge_Bay,2001,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1569,America/Cambridge_Bay,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1570,America/Yellowknife,1970,NT_YK,-420,120,4,-1,0,0,-7:00,10,-1,0,0,-6:00
+1571,America/Yellowknife,1980,Canada,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1572,America/Yellowknife,1987,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1573,America/Yellowknife,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1574,America/Inuvik,1970,NT_YK,-480,120,4,-1,0,0,-8:00,10,-1,0,0,-7:00
+1575,America/Inuvik,1979,NT_YK,-420,120,4,-1,0,0,-7:00,10,-1,0,0,-6:00
+1576,America/Inuvik,1980,Canada,-420,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1577,America/Inuvik,1987,Canada,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1578,America/Inuvik,2007,Canada,-420,60,3,8,0,0,-5:00,11,1,0,0,-6:00
+1579,America/Whitehorse,1970,NT_YK,-480,120,4,-1,0,0,-8:00,10,-1,0,0,-7:00
+1580,America/Whitehorse,1980,Canada,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1581,America/Whitehorse,1987,Canada,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1582,America/Whitehorse,2007,Canada,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
+1583,America/Dawson,1970,NT_YK,-540,120,4,-1,0,0,-9:00,10,-1,0,0,-8:00
+1584,America/Dawson,1973,NT_YK,-480,120,4,-1,0,0,-8:00,10,-1,0,0,-7:00
+1585,America/Dawson,1980,Canada,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1586,America/Dawson,1987,Canada,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1587,America/Dawson,2007,Canada,-480,60,3,8,0,0,-6:00,11,1,0,0,-7:00
+1588,America/Cancun,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1589,America/Cancun,1981,Mexico,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1590,America/Cancun,1996,Mexico,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1591,America/Cancun,1998,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1592,America/Cancun,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
+1593,America/Cancun,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1594,America/Merida,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1595,America/Merida,1981,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1596,America/Merida,1982,Mexico,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1597,America/Merida,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1598,America/Merida,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
+1599,America/Merida,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1600,America/Matamoros,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1601,America/Matamoros,1988,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1602,America/Matamoros,1989,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1603,America/Matamoros,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
+1604,America/Matamoros,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1605,America/Matamoros,2010,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1606,America/Monterrey,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1607,America/Monterrey,1988,US,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1608,America/Monterrey,1989,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1609,America/Monterrey,2001,Mexico,-360,60,5,1,0,0,-4:00,9,-1,0,0,-5:00
+1610,America/Monterrey,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1611,America/Mexico_City,1970,Mexico,-360,60,2,12,-1,0,-6:00,7,30,-1,0,-7:00
+1612,America/Mexico_City,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1613,America/Mexico_City,2001,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1614,America/Mexico_City,2002,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1615,America/Ojinaga,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1616,America/Ojinaga,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1617,America/Ojinaga,1998,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1618,America/Ojinaga,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
+1619,America/Ojinaga,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1620,America/Ojinaga,2010,US,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1621,America/Chihuahua,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1622,America/Chihuahua,1996,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1623,America/Chihuahua,1998,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1624,America/Chihuahua,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
+1625,America/Chihuahua,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1626,America/Hermosillo,1970,Mexico,-420,60,2,12,-1,0,-7:00,7,30,-1,0,-8:00
+1627,America/Hermosillo,1996,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1628,America/Hermosillo,1999,,-420,0,0,0,0,0,00:00,0,0,0,0,00:00
+1629,America/Mazatlan,1970,Mexico,-420,60,2,12,-1,0,-7:00,7,30,-1,0,-8:00
+1630,America/Mazatlan,1996,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1631,America/Mazatlan,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
+1632,America/Mazatlan,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1633,America/Bahia_Banderas,1970,Mexico,-420,60,2,12,-1,0,-7:00,7,30,-1,0,-8:00
+1634,America/Bahia_Banderas,1996,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1635,America/Bahia_Banderas,2001,Mexico,-420,60,5,1,0,0,-5:00,9,-1,0,0,-6:00
+1636,America/Bahia_Banderas,2002,Mexico,-420,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1637,America/Bahia_Banderas,2010,Mexico,-360,60,4,1,0,0,-4:00,10,-1,0,0,-5:00
+1638,America/Tijuana,1970,,-480,0,0,0,0,0,00:00,0,0,0,0,00:00
+1639,America/Tijuana,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1640,America/Tijuana,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1641,America/Tijuana,1996,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1642,America/Tijuana,2001,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1643,America/Tijuana,2002,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1644,America/Tijuana,2010,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1645,America/Santa_Isabel,1970,,-480,0,0,0,0,0,00:00,0,0,0,0,00:00
+1646,America/Santa_Isabel,1976,US,-480,60,4,-1,0,0,-6:00,10,-1,0,0,-7:00
+1647,America/Santa_Isabel,1987,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1648,America/Santa_Isabel,1996,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1649,America/Santa_Isabel,2001,US,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1650,America/Santa_Isabel,2002,Mexico,-480,60,4,1,0,0,-6:00,10,-1,0,0,-7:00
+1651,America/Anguilla,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1652,America/Antigua,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1653,America/Nassau,1970,Bahamas,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1654,America/Nassau,1975,Bahamas,-300,0,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1655,America/Nassau,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1656,America/Nassau,1987,US,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1657,America/Nassau,2007,US,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1658,America/Barbados,1970,Barb,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1659,America/Barbados,1977,Barb,-240,60,6,12,-1,0,-2:00,10,1,0,0,-3:00
+1660,America/Barbados,1978,Barb,-240,60,4,15,0,0,-2:00,10,1,0,0,-3:00
+1661,America/Barbados,1979,Barb,-240,60,4,15,0,0,-2:00,9,30,-1,0,-3:00
+1662,America/Barbados,1980,Barb,-240,60,4,15,0,0,-2:00,9,25,-1,0,-3:00
+1663,America/Barbados,1981,Barb,-240,0,4,15,0,0,-2:00,9,25,-1,0,-3:00
+1664,America/Belize,1970,Belize,-360,0,12,31,-1,0,06:00,2,9,0,0,-7:00
+1665,America/Belize,1973,Belize,-360,60,12,5,-1,0,-6:00,1,1,-1,0,05:00
+1666,America/Belize,1974,Belize,-360,0,12,31,-1,0,06:00,2,9,-1,0,-7:00
+1667,America/Belize,1982,Belize,-360,60,12,18,-1,0,-6:00,1,1,-1,0,05:00
+1668,America/Belize,1983,Belize,-360,0,12,31,-1,0,06:00,2,12,-1,0,-7:00
+1669,Atlantic/Bermuda,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1670,Atlantic/Bermuda,1974,Bahamas,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1671,Atlantic/Bermuda,1975,Bahamas,-240,0,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1672,Atlantic/Bermuda,1976,US,-240,60,4,-1,0,0,-2:00,10,-1,0,0,-3:00
+1673,Atlantic/Bermuda,1987,US,-240,60,4,1,0,0,-2:00,10,-1,0,0,-3:00
+1674,Atlantic/Bermuda,2007,US,-240,60,3,8,0,0,-2:00,11,1,0,0,-3:00
+1675,America/Cayman,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1676,America/Costa_Rica,1970,CR,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1677,America/Costa_Rica,1979,CR,-360,60,2,-1,0,0,-6:00,6,1,0,0,-7:00
+1678,America/Costa_Rica,1991,CR,-360,60,1,15,6,0,-6:00,7,1,-1,0,-7:00
+1679,America/Costa_Rica,1992,CR,-360,60,1,15,6,0,-6:00,3,15,-1,0,-7:00
+1680,America/Costa_Rica,1993,CR,-360,0,1,15,6,0,-6:00,3,15,-1,0,-7:00
+1681,America/Havana,1970,Cuba,-300,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1682,America/Havana,1972,Cuba,-300,60,4,-1,0,0,-5:00,10,8,-1,0,-6:00
+1683,America/Havana,1975,Cuba,-300,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1684,America/Havana,1978,Cuba,-300,60,5,7,-1,0,-5:00,10,8,0,0,-6:00
+1685,America/Havana,1979,Cuba,-300,60,3,15,0,0,-5:00,10,8,0,0,-6:00
+1686,America/Havana,1981,Cuba,-300,60,5,5,0,0,-5:00,10,8,0,0,-6:00
+1687,America/Havana,1986,Cuba,-300,60,3,14,0,0,-5:00,10,8,0,0,-6:00
+1688,America/Havana,1990,Cuba,-300,60,4,1,0,0,-5:00,10,8,0,0,-6:00
+1689,America/Havana,1991,Cuba,-300,60,4,1,0,0,-5:00,10,8,0,0,-5:00
+1690,America/Havana,1996,Cuba,-300,60,4,1,0,0,-5:00,10,6,-1,0,-5:00
+1691,America/Havana,1997,Cuba,-300,60,4,1,0,0,-5:00,10,12,-1,0,-5:00
+1692,America/Havana,1998,Cuba,-300,60,3,-1,0,0,-5:00,10,-1,0,0,-5:00
+1693,America/Havana,2000,Cuba,-300,60,4,1,0,0,-5:00,10,-1,0,0,-5:00
+1694,America/Havana,2004,Cuba,-300,60,4,1,0,0,-5:00,1,1,-1,0,06:00
+1695,America/Havana,2006,Cuba,-300,0,12,31,-1,0,07:00,10,-1,0,0,-5:00
+1696,America/Havana,2007,Cuba,-300,60,3,8,0,0,-5:00,10,-1,0,0,-5:00
+1697,America/Havana,2008,Cuba,-300,60,3,15,0,0,-5:00,10,-1,0,0,-5:00
+1698,America/Havana,2009,Cuba,-300,60,3,8,0,0,-5:00,10,-1,0,0,-5:00
+1699,America/Havana,2011,Cuba,-300,60,3,15,0,0,-5:00,10,-1,0,0,-5:00
+1700,America/Havana,2012,Cuba,-300,60,3,8,0,0,-5:00,10,-1,0,0,-5:00
+1701,America/Dominica,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1702,America/Santo_Domingo,1970,DR,-300,30,10,-1,0,0,-5:00,2,21,-1,0,-6:00
+1703,America/Santo_Domingo,1971,DR,-300,30,10,-1,0,0,-5:00,1,20,-1,0,-6:00
+1704,America/Santo_Domingo,1972,DR,-300,30,10,-1,0,0,-5:00,1,21,-1,0,-6:00
+1705,America/Santo_Domingo,1974,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1706,America/El_Salvador,1970,Salv,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1707,America/El_Salvador,1987,Salv,-360,60,5,1,0,0,-6:00,9,-1,0,0,-7:00
+1708,America/El_Salvador,1988,Salv,-360,0,5,1,0,0,-6:00,9,-1,0,0,-7:00
+1709,America/Grenada,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1710,America/Guadeloupe,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1711,America/Guatemala,1970,Guat,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1712,America/Guatemala,1973,Guat,-360,60,11,25,-1,0,-6:00,1,1,-1,0,05:00
+1713,America/Guatemala,1974,Guat,-360,0,12,31,-1,0,06:00,2,24,-1,0,-7:00
+1714,America/Guatemala,1983,Guat,-360,60,5,21,-1,0,-6:00,9,22,-1,0,-7:00
+1715,America/Guatemala,1991,Guat,-360,60,3,23,-1,0,-6:00,9,7,-1,0,-7:00
+1716,America/Guatemala,2006,Guat,-360,60,4,30,-1,0,-6:00,10,1,-1,0,-7:00
+1717,America/Guatemala,2007,Guat,-360,0,4,30,-1,0,-6:00,10,1,-1,0,-7:00
+1718,America/Port-au-Prince,1970,Haiti,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1719,America/Port-au-Prince,1983,Haiti,-300,60,5,8,-1,0,-5:00,10,-1,0,0,-6:00
+1720,America/Port-au-Prince,1984,Haiti,-300,60,4,-1,0,0,-5:00,10,-1,0,0,-6:00
+1721,America/Port-au-Prince,1988,Haiti,-300,60,4,1,0,0,-4:00,10,-1,0,0,-4:00
+1722,America/Port-au-Prince,2005,Haiti,-300,60,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1723,America/Port-au-Prince,2006,Haiti,-300,0,4,1,0,0,-5:00,10,-1,0,0,-6:00
+1724,America/Tegucigalpa,1970,Hond,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1725,America/Tegucigalpa,1987,Hond,-360,60,5,1,0,0,-6:00,9,-1,0,0,-7:00
+1726,America/Tegucigalpa,2006,Hond,-360,60,5,1,0,0,-6:00,8,1,1,0,-7:00
+1727,America/Tegucigalpa,2007,Hond,-360,0,5,1,0,0,-6:00,8,1,1,0,-7:00
+1728,America/Jamaica,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1729,America/Jamaica,1974,US,-300,60,1,6,-1,0,-3:00,10,-1,0,0,-4:00
+1730,America/Jamaica,1975,US,-300,60,2,23,-1,0,-3:00,10,-1,0,0,-4:00
+1731,America/Jamaica,1976,US,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1732,America/Jamaica,1984,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1733,America/Martinique,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1734,America/Martinique,1980,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1735,America/Montserrat,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1736,America/Managua,1970,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1737,America/Managua,1973,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1738,America/Managua,1975,Nic,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1739,America/Managua,1979,Nic,-360,60,3,16,0,0,-6:00,6,23,1,0,-7:00
+1740,America/Managua,1992,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1741,America/Managua,1993,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1742,America/Managua,1997,Nic,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+1743,America/Managua,2005,Nic,-360,60,4,10,-1,0,-6:00,10,1,0,0,-7:00
+1744,America/Managua,2006,Nic,-360,60,4,30,-1,0,-4:00,10,1,0,0,-6:00
+1745,America/Managua,2007,Nic,-360,0,4,30,-1,0,-4:00,10,1,0,0,-6:00
+1746,America/Panama,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1747,America/Puerto_Rico,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1748,America/St_Kitts,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1749,America/St_Lucia,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1750,America/Miquelon,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1751,America/Miquelon,1980,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1752,America/Miquelon,1987,Canada,-180,60,4,1,0,0,-1:00,10,-1,0,0,-2:00
+1753,America/Miquelon,2007,Canada,-180,60,3,8,0,0,-1:00,11,1,0,0,-2:00
+1754,America/St_Vincent,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1755,America/Grand_Turk,1970,TC,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+1756,America/Grand_Turk,1979,TC,-300,60,4,-1,0,0,-3:00,10,-1,0,0,-4:00
+1757,America/Grand_Turk,1987,TC,-300,60,4,1,0,0,-3:00,10,-1,0,0,-4:00
+1758,America/Grand_Turk,2007,TC,-300,60,3,8,0,0,-3:00,11,1,0,0,-4:00
+1759,America/Tortola,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1760,America/St_Thomas,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1761,America/Argentina/Buenos_Aires,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1762,America/Argentina/Buenos_Aires,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1763,America/Argentina/Buenos_Aires,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1764,America/Argentina/Buenos_Aires,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1765,America/Argentina/Buenos_Aires,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1766,America/Argentina/Buenos_Aires,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1767,America/Argentina/Buenos_Aires,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
+1768,America/Argentina/Buenos_Aires,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1769,America/Argentina/Buenos_Aires,2008,Arg,-180,60,10,15,0,0,-3:00,3,15,0,0,-4:00
+1770,America/Argentina/Buenos_Aires,2009,Arg,-180,0,12,31,-1,0,09:00,3,15,0,0,-4:00
+1771,America/Argentina/Cordoba,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1772,America/Argentina/Cordoba,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1773,America/Argentina/Cordoba,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1774,America/Argentina/Cordoba,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1775,America/Argentina/Cordoba,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1776,America/Argentina/Cordoba,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1777,America/Argentina/Cordoba,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
+1778,America/Argentina/Cordoba,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1779,America/Argentina/Cordoba,2008,Arg,-180,60,10,15,0,0,-3:00,3,15,0,0,-4:00
+1780,America/Argentina/Cordoba,2009,Arg,-180,0,12,31,-1,0,09:00,3,15,0,0,-4:00
+1781,America/Argentina/Salta,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1782,America/Argentina/Salta,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1783,America/Argentina/Salta,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1784,America/Argentina/Salta,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1785,America/Argentina/Salta,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1786,America/Argentina/Salta,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1787,America/Argentina/Salta,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
+1788,America/Argentina/Salta,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1789,America/Argentina/Salta,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1790,America/Argentina/Tucuman,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1791,America/Argentina/Tucuman,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1792,America/Argentina/Tucuman,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1793,America/Argentina/Tucuman,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1794,America/Argentina/Tucuman,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1795,America/Argentina/Tucuman,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1796,America/Argentina/Tucuman,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1797,America/Argentina/Tucuman,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1798,America/Argentina/Tucuman,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1799,America/Argentina/Tucuman,2008,Arg,-180,60,10,15,0,0,-3:00,3,15,0,0,-4:00
+1800,America/Argentina/Tucuman,2009,Arg,-180,0,12,31,-1,0,09:00,3,15,0,0,-4:00
+1801,America/Argentina/La_Rioja,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1802,America/Argentina/La_Rioja,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1803,America/Argentina/La_Rioja,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1804,America/Argentina/La_Rioja,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1805,America/Argentina/La_Rioja,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1806,America/Argentina/La_Rioja,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1807,America/Argentina/La_Rioja,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1808,America/Argentina/La_Rioja,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1809,America/Argentina/La_Rioja,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1810,America/Argentina/La_Rioja,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1811,America/Argentina/San_Juan,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1812,America/Argentina/San_Juan,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1813,America/Argentina/San_Juan,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1814,America/Argentina/San_Juan,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1815,America/Argentina/San_Juan,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1816,America/Argentina/San_Juan,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1817,America/Argentina/San_Juan,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1818,America/Argentina/San_Juan,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1819,America/Argentina/San_Juan,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1820,America/Argentina/San_Juan,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1821,America/Argentina/Jujuy,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1822,America/Argentina/Jujuy,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1823,America/Argentina/Jujuy,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1824,America/Argentina/Jujuy,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1825,America/Argentina/Jujuy,1990,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1826,America/Argentina/Jujuy,1991,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1827,America/Argentina/Jujuy,1992,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1828,America/Argentina/Jujuy,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1829,America/Argentina/Jujuy,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1830,America/Argentina/Jujuy,2000,Arg,-180,0,12,31,-1,0,09:00,3,3,-1,0,-4:00
+1831,America/Argentina/Jujuy,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1832,America/Argentina/Jujuy,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1833,America/Argentina/Catamarca,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1834,America/Argentina/Catamarca,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1835,America/Argentina/Catamarca,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1836,America/Argentina/Catamarca,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1837,America/Argentina/Catamarca,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1838,America/Argentina/Catamarca,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1839,America/Argentina/Catamarca,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1840,America/Argentina/Catamarca,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1841,America/Argentina/Catamarca,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1842,America/Argentina/Catamarca,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1843,America/Argentina/Mendoza,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1844,America/Argentina/Mendoza,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1845,America/Argentina/Mendoza,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1846,America/Argentina/Mendoza,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1847,America/Argentina/Mendoza,1990,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1848,America/Argentina/Mendoza,1992,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1849,America/Argentina/Mendoza,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1850,America/Argentina/Mendoza,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1851,America/Argentina/Mendoza,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1852,America/Argentina/Mendoza,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1853,America/Argentina/Mendoza,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1854,America/Argentina/Mendoza,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1855,America/Argentina/San_Luis,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1856,America/Argentina/San_Luis,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1857,America/Argentina/San_Luis,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1858,America/Argentina/San_Luis,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1859,America/Argentina/San_Luis,1990,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1860,America/Argentina/San_Luis,1991,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1861,America/Argentina/San_Luis,1999,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1862,America/Argentina/San_Luis,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1863,America/Argentina/San_Luis,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1864,America/Argentina/San_Luis,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1865,America/Argentina/San_Luis,2008,SanLuis,-240,60,10,8,0,0,-4:00,3,8,0,0,-5:00
+1866,America/Argentina/Rio_Gallegos,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1867,America/Argentina/Rio_Gallegos,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1868,America/Argentina/Rio_Gallegos,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1869,America/Argentina/Rio_Gallegos,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1870,America/Argentina/Rio_Gallegos,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1871,America/Argentina/Rio_Gallegos,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1872,America/Argentina/Rio_Gallegos,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1873,America/Argentina/Rio_Gallegos,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1874,America/Argentina/Rio_Gallegos,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1875,America/Argentina/Rio_Gallegos,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1876,America/Argentina/Ushuaia,1970,Arg,-180,0,12,31,-1,0,09:00,4,1,0,0,-4:00
+1877,America/Argentina/Ushuaia,1974,Arg,-180,60,1,23,-1,0,-3:00,5,1,-1,0,-4:00
+1878,America/Argentina/Ushuaia,1988,Arg,-180,60,12,1,-1,0,-3:00,1,1,-1,0,08:00
+1879,America/Argentina/Ushuaia,1989,Arg,-180,60,10,15,0,0,-3:00,3,1,0,0,-4:00
+1880,America/Argentina/Ushuaia,1993,Arg,-180,0,12,31,-1,0,09:00,3,1,0,0,-4:00
+1881,America/Argentina/Ushuaia,1999,Arg,-240,60,10,1,0,0,-4:00,1,1,-1,0,07:00
+1882,America/Argentina/Ushuaia,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1883,America/Argentina/Ushuaia,2004,Arg,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1884,America/Argentina/Ushuaia,2007,Arg,-180,60,12,30,-1,0,-3:00,1,1,-1,0,08:00
+1885,America/Argentina/Ushuaia,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1886,America/Aruba,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1887,America/La_Paz,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1888,America/Noronha,1970,Brazil,-120,0,12,31,-1,0,10:00,3,1,-1,0,-3:00
+1889,America/Noronha,1985,Brazil,-120,60,11,2,-1,0,-2:00,1,1,-1,0,09:00
+1890,America/Noronha,1986,Brazil,-120,60,10,25,-1,0,-2:00,3,15,-1,0,-3:00
+1891,America/Noronha,1987,Brazil,-120,60,10,25,-1,0,-2:00,2,14,-1,0,-3:00
+1892,America/Noronha,1988,Brazil,-120,60,10,16,-1,0,-2:00,2,7,-1,0,-3:00
+1893,America/Noronha,1989,Brazil,-120,60,10,15,-1,0,-2:00,1,29,-1,0,-3:00
+1894,America/Noronha,1990,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
+1895,America/Noronha,1999,Brazil,-120,60,10,3,-1,0,-2:00,2,21,-1,0,-3:00
+1896,America/Noronha,2000,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
+1897,America/Noronha,2001,Brazil,-120,60,10,8,0,0,-2:00,2,15,0,0,-3:00
+1898,America/Noronha,2002,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
+1899,America/Belem,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
+1900,America/Belem,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
+1901,America/Belem,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
+1902,America/Belem,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
+1903,America/Belem,1988,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1904,America/Santarem,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
+1905,America/Santarem,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
+1906,America/Santarem,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
+1907,America/Santarem,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
+1908,America/Santarem,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+1909,America/Santarem,2008,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1910,America/Fortaleza,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
+1911,America/Fortaleza,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
+1912,America/Fortaleza,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
+1913,America/Fortaleza,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
+1914,America/Fortaleza,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
+1915,America/Fortaleza,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
+1916,America/Fortaleza,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1917,America/Fortaleza,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
+1918,America/Fortaleza,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1919,America/Fortaleza,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
+1920,America/Fortaleza,2002,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1921,America/Recife,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
+1922,America/Recife,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
+1923,America/Recife,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
+1924,America/Recife,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
+1925,America/Recife,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
+1926,America/Recife,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
+1927,America/Recife,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1928,America/Recife,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
+1929,America/Recife,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1930,America/Recife,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
+1931,America/Recife,2002,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1932,America/Araguaina,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
+1933,America/Araguaina,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
+1934,America/Araguaina,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
+1935,America/Araguaina,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
+1936,America/Araguaina,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
+1937,America/Araguaina,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
+1938,America/Araguaina,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1939,America/Araguaina,1995,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
+1940,America/Araguaina,1996,Brazil,-180,60,10,6,-1,0,-3:00,2,11,-1,0,-4:00
+1941,America/Araguaina,1997,Brazil,-180,60,10,6,-1,0,-3:00,2,16,-1,0,-4:00
+1942,America/Araguaina,1998,Brazil,-180,60,10,11,-1,0,-3:00,3,1,-1,0,-4:00
+1943,America/Araguaina,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
+1944,America/Araguaina,2000,Brazil,-180,60,10,8,0,0,-3:00,2,27,-1,0,-4:00
+1945,America/Araguaina,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
+1946,America/Araguaina,2002,Brazil,-180,60,11,3,-1,0,-3:00,2,15,0,0,-4:00
+1947,America/Araguaina,2003,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1948,America/Maceio,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
+1949,America/Maceio,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
+1950,America/Maceio,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
+1951,America/Maceio,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
+1952,America/Maceio,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
+1953,America/Maceio,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
+1954,America/Maceio,1990,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1955,America/Maceio,1995,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
+1956,America/Maceio,1996,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1957,America/Maceio,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
+1958,America/Maceio,2000,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1959,America/Maceio,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
+1960,America/Maceio,2002,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1961,America/Bahia,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
+1962,America/Bahia,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
+1963,America/Bahia,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
+1964,America/Bahia,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
+1965,America/Bahia,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
+1966,America/Bahia,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
+1967,America/Bahia,1990,Brazil,-180,60,10,21,-1,0,-3:00,2,11,-1,0,-4:00
+1968,America/Bahia,1991,Brazil,-180,60,10,20,-1,0,-3:00,2,17,-1,0,-4:00
+1969,America/Bahia,1992,Brazil,-180,60,10,25,-1,0,-3:00,2,9,-1,0,-4:00
+1970,America/Bahia,1993,Brazil,-180,60,10,11,0,0,-3:00,1,31,-1,0,-4:00
+1971,America/Bahia,1994,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
+1972,America/Bahia,1996,Brazil,-180,60,10,6,-1,0,-3:00,2,11,-1,0,-4:00
+1973,America/Bahia,1997,Brazil,-180,60,10,6,-1,0,-3:00,2,16,-1,0,-4:00
+1974,America/Bahia,1998,Brazil,-180,60,10,11,-1,0,-3:00,3,1,-1,0,-4:00
+1975,America/Bahia,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
+1976,America/Bahia,2000,Brazil,-180,60,10,8,0,0,-3:00,2,27,-1,0,-4:00
+1977,America/Bahia,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
+1978,America/Bahia,2002,Brazil,-180,60,11,3,-1,0,-3:00,2,15,0,0,-4:00
+1979,America/Bahia,2003,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+1980,America/Sao_Paulo,1970,Brazil,-180,0,12,31,-1,0,09:00,3,1,-1,0,-4:00
+1981,America/Sao_Paulo,1985,Brazil,-180,60,11,2,-1,0,-3:00,1,1,-1,0,08:00
+1982,America/Sao_Paulo,1986,Brazil,-180,60,10,25,-1,0,-3:00,3,15,-1,0,-4:00
+1983,America/Sao_Paulo,1987,Brazil,-180,60,10,25,-1,0,-3:00,2,14,-1,0,-4:00
+1984,America/Sao_Paulo,1988,Brazil,-180,60,10,16,-1,0,-3:00,2,7,-1,0,-4:00
+1985,America/Sao_Paulo,1989,Brazil,-180,60,10,15,-1,0,-3:00,1,29,-1,0,-4:00
+1986,America/Sao_Paulo,1990,Brazil,-180,60,10,21,-1,0,-3:00,2,11,-1,0,-4:00
+1987,America/Sao_Paulo,1991,Brazil,-180,60,10,20,-1,0,-3:00,2,17,-1,0,-4:00
+1988,America/Sao_Paulo,1992,Brazil,-180,60,10,25,-1,0,-3:00,2,9,-1,0,-4:00
+1989,America/Sao_Paulo,1993,Brazil,-180,60,10,11,0,0,-3:00,1,31,-1,0,-4:00
+1990,America/Sao_Paulo,1994,Brazil,-180,60,10,11,0,0,-3:00,2,15,0,0,-4:00
+1991,America/Sao_Paulo,1996,Brazil,-180,60,10,6,-1,0,-3:00,2,11,-1,0,-4:00
+1992,America/Sao_Paulo,1997,Brazil,-180,60,10,6,-1,0,-3:00,2,16,-1,0,-4:00
+1993,America/Sao_Paulo,1998,Brazil,-180,60,10,11,-1,0,-3:00,3,1,-1,0,-4:00
+1994,America/Sao_Paulo,1999,Brazil,-180,60,10,3,-1,0,-3:00,2,21,-1,0,-4:00
+1995,America/Sao_Paulo,2000,Brazil,-180,60,10,8,0,0,-3:00,2,27,-1,0,-4:00
+1996,America/Sao_Paulo,2001,Brazil,-180,60,10,8,0,0,-3:00,2,15,0,0,-4:00
+1997,America/Sao_Paulo,2002,Brazil,-180,60,11,3,-1,0,-3:00,2,15,0,0,-4:00
+1998,America/Sao_Paulo,2003,Brazil,-180,60,10,19,-1,0,-3:00,2,15,0,0,-4:00
+1999,America/Sao_Paulo,2004,Brazil,-180,60,11,2,-1,0,-3:00,2,15,0,0,-4:00
+2000,America/Sao_Paulo,2005,Brazil,-180,60,10,16,-1,0,-3:00,2,15,0,0,-4:00
+2001,America/Sao_Paulo,2006,Brazil,-180,60,11,5,-1,0,-3:00,2,15,0,0,-4:00
+2002,America/Sao_Paulo,2007,Brazil,-180,60,10,8,0,0,-3:00,2,25,-1,0,-4:00
+2003,America/Sao_Paulo,2008,Brazil,-180,60,10,15,0,0,-3:00,2,15,0,0,-4:00
+2004,America/Sao_Paulo,2012,Brazil,-180,60,10,15,0,0,-3:00,2,22,0,0,-4:00
+2005,America/Sao_Paulo,2013,Brazil,-180,60,10,15,0,0,-3:00,2,15,0,0,-4:00
+2006,America/Sao_Paulo,2015,Brazil,-180,60,10,15,0,0,-3:00,2,22,0,0,-4:00
+2007,America/Sao_Paulo,2016,Brazil,-180,60,10,15,0,0,-3:00,2,15,0,0,-4:00
+2008,America/Campo_Grande,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
+2009,America/Campo_Grande,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
+2010,America/Campo_Grande,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
+2011,America/Campo_Grande,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
+2012,America/Campo_Grande,1988,Brazil,-240,60,10,16,-1,0,-4:00,2,7,-1,0,-5:00
+2013,America/Campo_Grande,1989,Brazil,-240,60,10,15,-1,0,-4:00,1,29,-1,0,-5:00
+2014,America/Campo_Grande,1990,Brazil,-240,60,10,21,-1,0,-4:00,2,11,-1,0,-5:00
+2015,America/Campo_Grande,1991,Brazil,-240,60,10,20,-1,0,-4:00,2,17,-1,0,-5:00
+2016,America/Campo_Grande,1992,Brazil,-240,60,10,25,-1,0,-4:00,2,9,-1,0,-5:00
+2017,America/Campo_Grande,1993,Brazil,-240,60,10,11,0,0,-4:00,1,31,-1,0,-5:00
+2018,America/Campo_Grande,1994,Brazil,-240,60,10,11,0,0,-4:00,2,15,0,0,-5:00
+2019,America/Campo_Grande,1996,Brazil,-240,60,10,6,-1,0,-4:00,2,11,-1,0,-5:00
+2020,America/Campo_Grande,1997,Brazil,-240,60,10,6,-1,0,-4:00,2,16,-1,0,-5:00
+2021,America/Campo_Grande,1998,Brazil,-240,60,10,11,-1,0,-4:00,3,1,-1,0,-5:00
+2022,America/Campo_Grande,1999,Brazil,-240,60,10,3,-1,0,-4:00,2,21,-1,0,-5:00
+2023,America/Campo_Grande,2000,Brazil,-240,60,10,8,0,0,-4:00,2,27,-1,0,-5:00
+2024,America/Campo_Grande,2001,Brazil,-240,60,10,8,0,0,-4:00,2,15,0,0,-5:00
+2025,America/Campo_Grande,2002,Brazil,-240,60,11,3,-1,0,-4:00,2,15,0,0,-5:00
+2026,America/Campo_Grande,2003,Brazil,-240,60,10,19,-1,0,-4:00,2,15,0,0,-5:00
+2027,America/Campo_Grande,2004,Brazil,-240,60,11,2,-1,0,-4:00,2,15,0,0,-5:00
+2028,America/Campo_Grande,2005,Brazil,-240,60,10,16,-1,0,-4:00,2,15,0,0,-5:00
+2029,America/Campo_Grande,2006,Brazil,-240,60,11,5,-1,0,-4:00,2,15,0,0,-5:00
+2030,America/Campo_Grande,2007,Brazil,-240,60,10,8,0,0,-4:00,2,25,-1,0,-5:00
+2031,America/Campo_Grande,2008,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
+2032,America/Campo_Grande,2012,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
+2033,America/Campo_Grande,2013,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
+2034,America/Campo_Grande,2015,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
+2035,America/Campo_Grande,2016,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
+2036,America/Cuiaba,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
+2037,America/Cuiaba,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
+2038,America/Cuiaba,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
+2039,America/Cuiaba,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
+2040,America/Cuiaba,1988,Brazil,-240,60,10,16,-1,0,-4:00,2,7,-1,0,-5:00
+2041,America/Cuiaba,1989,Brazil,-240,60,10,15,-1,0,-4:00,1,29,-1,0,-5:00
+2042,America/Cuiaba,1990,Brazil,-240,60,10,21,-1,0,-4:00,2,11,-1,0,-5:00
+2043,America/Cuiaba,1991,Brazil,-240,60,10,20,-1,0,-4:00,2,17,-1,0,-5:00
+2044,America/Cuiaba,1992,Brazil,-240,60,10,25,-1,0,-4:00,2,9,-1,0,-5:00
+2045,America/Cuiaba,1993,Brazil,-240,60,10,11,0,0,-4:00,1,31,-1,0,-5:00
+2046,America/Cuiaba,1994,Brazil,-240,60,10,11,0,0,-4:00,2,15,0,0,-5:00
+2047,America/Cuiaba,1996,Brazil,-240,60,10,6,-1,0,-4:00,2,11,-1,0,-5:00
+2048,America/Cuiaba,1997,Brazil,-240,60,10,6,-1,0,-4:00,2,16,-1,0,-5:00
+2049,America/Cuiaba,1998,Brazil,-240,60,10,11,-1,0,-4:00,3,1,-1,0,-5:00
+2050,America/Cuiaba,1999,Brazil,-240,60,10,3,-1,0,-4:00,2,21,-1,0,-5:00
+2051,America/Cuiaba,2000,Brazil,-240,60,10,8,0,0,-4:00,2,27,-1,0,-5:00
+2052,America/Cuiaba,2001,Brazil,-240,60,10,8,0,0,-4:00,2,15,0,0,-5:00
+2053,America/Cuiaba,2002,Brazil,-240,60,11,3,-1,0,-4:00,2,15,0,0,-5:00
+2054,America/Cuiaba,2003,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2055,America/Cuiaba,2004,Brazil,-240,60,11,2,-1,0,-4:00,2,15,0,0,-5:00
+2056,America/Cuiaba,2005,Brazil,-240,60,10,16,-1,0,-4:00,2,15,0,0,-5:00
+2057,America/Cuiaba,2006,Brazil,-240,60,11,5,-1,0,-4:00,2,15,0,0,-5:00
+2058,America/Cuiaba,2007,Brazil,-240,60,10,8,0,0,-4:00,2,25,-1,0,-5:00
+2059,America/Cuiaba,2008,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
+2060,America/Cuiaba,2012,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
+2061,America/Cuiaba,2013,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
+2062,America/Cuiaba,2015,Brazil,-240,60,10,15,0,0,-4:00,2,22,0,0,-5:00
+2063,America/Cuiaba,2016,Brazil,-240,60,10,15,0,0,-4:00,2,15,0,0,-5:00
+2064,America/Porto_Velho,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
+2065,America/Porto_Velho,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
+2066,America/Porto_Velho,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
+2067,America/Porto_Velho,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
+2068,America/Porto_Velho,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2069,America/Boa_Vista,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
+2070,America/Boa_Vista,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
+2071,America/Boa_Vista,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
+2072,America/Boa_Vista,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
+2073,America/Boa_Vista,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2074,America/Boa_Vista,1999,Brazil,-240,60,10,3,-1,0,-4:00,2,21,-1,0,-5:00
+2075,America/Boa_Vista,2000,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2076,America/Manaus,1970,Brazil,-240,0,12,31,-1,0,08:00,3,1,-1,0,-5:00
+2077,America/Manaus,1985,Brazil,-240,60,11,2,-1,0,-4:00,1,1,-1,0,07:00
+2078,America/Manaus,1986,Brazil,-240,60,10,25,-1,0,-4:00,3,15,-1,0,-5:00
+2079,America/Manaus,1987,Brazil,-240,60,10,25,-1,0,-4:00,2,14,-1,0,-5:00
+2080,America/Manaus,1988,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2081,America/Manaus,1993,Brazil,-240,60,10,11,0,0,-4:00,1,31,-1,0,-5:00
+2082,America/Manaus,1994,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2083,America/Eirunepe,1970,Brazil,-300,0,12,31,-1,0,07:00,3,1,-1,0,-6:00
+2084,America/Eirunepe,1985,Brazil,-300,60,11,2,-1,0,-5:00,1,1,-1,0,06:00
+2085,America/Eirunepe,1986,Brazil,-300,60,10,25,-1,0,-5:00,3,15,-1,0,-6:00
+2086,America/Eirunepe,1987,Brazil,-300,60,10,25,-1,0,-5:00,2,14,-1,0,-6:00
+2087,America/Eirunepe,1988,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+2088,America/Eirunepe,1993,Brazil,-300,60,10,11,0,0,-5:00,1,31,-1,0,-6:00
+2089,America/Eirunepe,1994,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+2090,America/Eirunepe,2008,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2091,America/Rio_Branco,1970,Brazil,-300,0,12,31,-1,0,07:00,3,1,-1,0,-6:00
+2092,America/Rio_Branco,1985,Brazil,-300,60,11,2,-1,0,-5:00,1,1,-1,0,06:00
+2093,America/Rio_Branco,1986,Brazil,-300,60,10,25,-1,0,-5:00,3,15,-1,0,-6:00
+2094,America/Rio_Branco,1987,Brazil,-300,60,10,25,-1,0,-5:00,2,14,-1,0,-6:00
+2095,America/Rio_Branco,1988,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+2096,America/Rio_Branco,2008,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2097,America/Santiago,1970,Chile,-240,60,10,9,0,0,4:00,3,29,-1,0,3:00
+2098,America/Santiago,1971,Chile,-240,60,10,9,0,0,4:00,3,14,-1,0,3:00
+2099,America/Santiago,1972,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
+2100,America/Santiago,1973,Chile,-240,60,9,30,-1,0,4:00,3,9,0,0,3:00
+2101,America/Santiago,1974,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
+2102,America/Santiago,1987,Chile,-240,60,10,9,0,0,4:00,4,12,-1,0,3:00
+2103,America/Santiago,1988,Chile,-240,60,10,1,0,0,4:00,3,9,0,0,3:00
+2104,America/Santiago,1989,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
+2105,America/Santiago,1990,Chile,-240,60,9,16,-1,0,4:00,3,18,-1,0,3:00
+2106,America/Santiago,1991,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
+2107,America/Santiago,1997,Chile,-240,60,10,9,0,0,4:00,3,30,-1,0,3:00
+2108,America/Santiago,1998,Chile,-240,60,9,27,-1,0,4:00,3,9,0,0,3:00
+2109,America/Santiago,1999,Chile,-240,60,10,9,0,0,4:00,4,4,-1,0,3:00
+2110,America/Santiago,2000,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
+2111,America/Santiago,2008,Chile,-240,60,10,9,0,0,4:00,3,30,-1,0,3:00
+2112,America/Santiago,2009,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
+2113,America/Santiago,2010,Chile,-240,60,10,9,0,0,4:00,4,1,0,0,3:00
+2114,America/Santiago,2011,Chile,-240,60,8,16,0,0,4:00,5,2,0,0,3:00
+2115,America/Santiago,2012,Chile,-240,60,10,9,0,0,4:00,3,9,0,0,3:00
+2116,Pacific/Easter,1970,Chile,-420,60,10,9,0,0,4:00,3,29,-1,0,3:00
+2117,Pacific/Easter,1971,Chile,-420,60,10,9,0,0,4:00,3,14,-1,0,3:00
+2118,Pacific/Easter,1972,Chile,-420,60,10,9,0,0,4:00,3,9,0,0,3:00
+2119,Pacific/Easter,1973,Chile,-420,60,9,30,-1,0,4:00,3,9,0,0,3:00
+2120,Pacific/Easter,1974,Chile,-420,60,10,9,0,0,4:00,3,9,0,0,3:00
+2121,Pacific/Easter,1982,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
+2122,Pacific/Easter,1987,Chile,-360,60,10,9,0,0,4:00,4,12,-1,0,3:00
+2123,Pacific/Easter,1988,Chile,-360,60,10,1,0,0,4:00,3,9,0,0,3:00
+2124,Pacific/Easter,1989,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
+2125,Pacific/Easter,1990,Chile,-360,60,9,16,-1,0,4:00,3,18,-1,0,3:00
+2126,Pacific/Easter,1991,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
+2127,Pacific/Easter,1997,Chile,-360,60,10,9,0,0,4:00,3,30,-1,0,3:00
+2128,Pacific/Easter,1998,Chile,-360,60,9,27,-1,0,4:00,3,9,0,0,3:00
+2129,Pacific/Easter,1999,Chile,-360,60,10,9,0,0,4:00,4,4,-1,0,3:00
+2130,Pacific/Easter,2000,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
+2131,Pacific/Easter,2008,Chile,-360,60,10,9,0,0,4:00,3,30,-1,0,3:00
+2132,Pacific/Easter,2009,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
+2133,Pacific/Easter,2010,Chile,-360,60,10,9,0,0,4:00,4,1,0,0,3:00
+2134,Pacific/Easter,2011,Chile,-360,60,8,16,0,0,4:00,5,2,0,0,3:00
+2135,Pacific/Easter,2012,Chile,-360,60,10,9,0,0,4:00,3,9,0,0,3:00
+2136,America/Bogota,1970,CO,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+2137,America/Bogota,1992,CO,-300,60,5,3,-1,0,-5:00,1,1,-1,0,06:00
+2138,America/Bogota,1993,CO,-300,0,12,31,-1,0,07:00,4,4,-1,0,-6:00
+2139,America/Curacao,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2140,America/Guayaquil,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+2141,Pacific/Galapagos,1970,,-300,0,0,0,0,0,00:00,0,0,0,0,00:00
+2142,Pacific/Galapagos,1986,,-360,0,0,0,0,0,00:00,0,0,0,0,00:00
+2143,Atlantic/Stanley,1970,Falk,-240,0,12,31,-1,0,08:00,1,1,-1,0,-5:00
+2144,Atlantic/Stanley,1983,Falk,-180,60,9,-1,0,0,-3:00,1,1,-1,0,08:00
+2145,Atlantic/Stanley,1984,Falk,-180,60,9,16,-1,0,-3:00,4,-1,0,0,-4:00
+2146,Atlantic/Stanley,1985,Falk,-240,60,9,9,0,0,-4:00,4,-1,0,0,-5:00
+2147,Atlantic/Stanley,1986,Falk,-240,60,9,9,0,0,-4:00,4,16,0,0,-5:00
+2148,Atlantic/Stanley,2001,Falk,-240,60,9,1,0,0,-2:00,4,15,0,0,-3:00
+2149,Atlantic/Stanley,2011,Falk,-240,60,9,1,0,0,-2:00,1,1,-1,0,07:00
+2150,Atlantic/Stanley,2012,Falk,-240,60,9,1,0,0,-2:00,4,15,0,0,-3:00
+2151,America/Cayenne,1970,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+2152,America/Guyana,1970,,-225,0,0,0,0,0,00:00,0,0,0,0,00:00
+2153,America/Guyana,1975,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+2154,America/Guyana,1991,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2155,America/Asuncion,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2156,America/Asuncion,1972,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+2157,America/Asuncion,1974,Para,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2158,America/Asuncion,1975,Para,-240,60,10,1,-1,0,-4:00,3,1,-1,0,-5:00
+2159,America/Asuncion,1979,Para,-240,60,10,1,-1,0,-4:00,4,1,-1,0,-5:00
+2160,America/Asuncion,1989,Para,-240,60,10,22,-1,0,-4:00,4,1,-1,0,-5:00
+2161,America/Asuncion,1990,Para,-240,60,10,1,-1,0,-4:00,4,1,-1,0,-5:00
+2162,America/Asuncion,1991,Para,-240,60,10,6,-1,0,-4:00,4,1,-1,0,-5:00
+2163,America/Asuncion,1992,Para,-240,60,10,5,-1,0,-4:00,3,1,-1,0,-5:00
+2164,America/Asuncion,1993,Para,-240,60,10,1,-1,0,-4:00,3,31,-1,0,-5:00
+2165,America/Asuncion,1994,Para,-240,60,10,1,-1,0,-4:00,2,-1,0,0,-5:00
+2166,America/Asuncion,1996,Para,-240,60,10,1,0,0,-4:00,3,1,-1,0,-5:00
+2167,America/Asuncion,1997,Para,-240,60,10,1,0,0,-4:00,2,-1,0,0,-5:00
+2168,America/Asuncion,1998,Para,-240,60,10,1,0,0,-4:00,3,1,0,0,-5:00
+2169,America/Asuncion,2002,Para,-240,60,9,1,0,0,-4:00,4,1,0,0,-5:00
+2170,America/Asuncion,2004,Para,-240,60,10,15,0,0,-4:00,4,1,0,0,-5:00
+2171,America/Asuncion,2005,Para,-240,60,10,15,0,0,-4:00,3,8,0,0,-5:00
+2172,America/Asuncion,2010,Para,-240,60,10,1,0,0,-4:00,4,8,0,0,-5:00
+2173,America/Lima,1970,Peru,-300,0,12,31,-1,0,07:00,3,24,0,0,-6:00
+2174,America/Lima,1986,Peru,-300,60,1,1,-1,0,-5:00,4,1,-1,0,-6:00
+2175,America/Lima,1995,Peru,-300,0,1,1,-1,0,-5:00,4,1,-1,0,-6:00
+2176,Atlantic/South_Georgia,1970,,-120,0,0,0,0,0,00:00,0,0,0,0,00:00
+2177,America/Paramaribo,1970,,-210,0,0,0,0,0,00:00,0,0,0,0,00:00
+2178,America/Paramaribo,1975,,-210,0,0,0,0,0,00:00,0,0,0,0,00:00
+2179,America/Paramaribo,1984,,-180,0,0,0,0,0,00:00,0,0,0,0,00:00
+2180,America/Port_of_Spain,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2181,America/Montevideo,1970,Uruguay,-180,30,5,27,-1,0,-3:00,12,2,-1,0,-4:00
+2182,America/Montevideo,1972,Uruguay,-180,60,4,24,-1,0,-3:00,8,15,-1,0,-4:00
+2183,America/Montevideo,1974,Uruguay,-180,60,12,22,-1,0,-3:00,1,1,-1,0,08:00
+2184,America/Montevideo,1976,Uruguay,-180,0,12,31,-1,0,09:00,10,1,-1,0,-4:00
+2185,America/Montevideo,1977,Uruguay,-180,60,12,4,-1,0,-3:00,1,1,-1,0,08:00
+2186,America/Montevideo,1978,Uruguay,-180,0,12,31,-1,0,09:00,4,1,-1,0,-4:00
+2187,America/Montevideo,1979,Uruguay,-180,60,10,1,-1,0,-3:00,1,1,-1,0,08:00
+2188,America/Montevideo,1980,Uruguay,-180,0,12,31,-1,0,09:00,5,1,-1,0,-4:00
+2189,America/Montevideo,1987,Uruguay,-180,60,12,14,-1,0,-3:00,1,1,-1,0,08:00
+2190,America/Montevideo,1988,Uruguay,-180,60,12,11,-1,0,-3:00,3,14,-1,0,-4:00
+2191,America/Montevideo,1989,Uruguay,-180,60,10,29,-1,0,-3:00,3,12,-1,0,-4:00
+2192,America/Montevideo,1990,Uruguay,-180,60,10,21,0,0,-3:00,3,1,0,0,-4:00
+2193,America/Montevideo,1992,Uruguay,-180,60,10,18,-1,0,-3:00,3,1,0,0,-4:00
+2194,America/Montevideo,1993,Uruguay,-180,0,12,31,-1,0,09:00,2,28,-1,0,-4:00
+2195,America/Montevideo,2004,Uruguay,-180,60,9,19,-1,0,-3:00,1,1,-1,0,08:00
+2196,America/Montevideo,2005,Uruguay,-180,60,10,9,-1,0,-1:00,3,27,-1,0,-2:00
+2197,America/Montevideo,2006,Uruguay,-180,60,10,1,0,0,-1:00,3,12,-1,0,-2:00
+2198,America/Montevideo,2007,Uruguay,-180,60,10,1,0,0,-1:00,3,8,0,0,-2:00
+2199,America/Caracas,1970,,-240,0,0,0,0,0,00:00,0,0,0,0,00:00
+2200,America/Caracas,2007,,-270,0,0,0,0,0,00:00,0,0,0,0,00:00
index f6e6c74..6a93f6e 100644 (file)
@@ -114,6 +114,12 @@ class plugin_defective_exception extends moodle_exception {
 function upgrade_main_savepoint($result, $version, $allowabort=true) {
     global $CFG;
 
+    //sanity check to avoid confusion with upgrade_mod_savepoint usage.
+    if (!is_bool($allowabort)) {
+        $errormessage = 'Parameter type mismatch. Are you mixing up upgrade_main_savepoint() and upgrade_mod_savepoint()?';
+        throw new coding_exception($errormessage);
+    }
+
     if (!$result) {
         throw new upgrade_exception(null, $version);
     }
index 1232659..d314ef2 100644 (file)
@@ -1528,7 +1528,7 @@ function purify_html($text, $options = array()) {
         $config->set('Core.ConvertDocumentToFragment', true);
         $config->set('Core.Encoding', 'UTF-8');
         $config->set('HTML.Doctype', 'XHTML 1.0 Transitional');
-        $config->set('URI.AllowedSchemes', array('http'=>true, 'https'=>true, 'ftp'=>true, 'irc'=>true, 'nntp'=>true, 'news'=>true, 'rtsp'=>true, 'teamspeak'=>true, 'gopher'=>true, 'mms'=>true));
+        $config->set('URI.AllowedSchemes', array('http'=>true, 'https'=>true, 'ftp'=>true, 'irc'=>true, 'nntp'=>true, 'news'=>true, 'rtsp'=>true, 'teamspeak'=>true, 'gopher'=>true, 'mms'=>true, 'mailto'=>true));
         $config->set('Attr.AllowedFrameTargets', array('_blank'));
 
         if (!empty($CFG->allowobjectembed)) {
index e1ac513..f6dce5d 100644 (file)
@@ -60,7 +60,7 @@ class local_qeupgradehelper_attempt_upgrader extends question_engine_attempt_upg
         gc_collect_cycles(); // This was really helpful in PHP 5.2. Perhaps remove.
         $a = new stdClass();
         $a->done = $done;
-        $a->todo = $outof;
+        $a->outof = $outof;
         $this->progressbar->update($done, $outof,
                 get_string('resettingquizattemptsprogress', 'local_qeupgradehelper', $a));
     }
index 9de50e0..1d4013f 100644 (file)
@@ -1000,14 +1000,14 @@ function message_get_contact($contactid) {
  *
  * @param mixed $frm submitted form data
  * @param bool $showicontext show text next to action icons?
- * @param object $user1 the current user
+ * @param object $currentuser the current user
  * @return void
  */
-function message_print_search_results($frm, $showicontext=false, $user1=null) {
+function message_print_search_results($frm, $showicontext=false, $currentuser=null) {
     global $USER, $DB, $OUTPUT;
 
-    if (empty($user1)) {
-        $user1 = $USER;
+    if (empty($currentuser)) {
+        $currentuser = $USER;
     }
 
     echo html_writer::start_tag('div', array('class' => 'mdl-left'));
@@ -1227,14 +1227,17 @@ function message_print_search_results($frm, $showicontext=false, $user1=null) {
                 echo message_get_fragment($message->fullmessage, $keywords);
                 echo html_writer::start_tag('div', array('class' => 'link'));
 
-                //find the user involved that isn't the current user
-                $user2id = null;
-                if ($user1->id == $message->useridto) {
-                    $user2id = $message->useridfrom;
+                //If the user clicks the context link display message sender on the left
+                //EXCEPT if the current user is in the conversation. Current user == always on the left
+                $leftsideuserid = $rightsideuserid = null;
+                if ($currentuser->id == $message->useridto) {
+                    $leftsideuserid = $message->useridto;
+                    $rightsideuserid = $message->useridfrom;
                 } else {
-                    $user2id = $message->useridto;
+                    $leftsideuserid = $message->useridfrom;
+                    $rightsideuserid = $message->useridto;
                 }
-                message_history_link($user1->id, $user2id, false,
+                message_history_link($leftsideuserid, $rightsideuserid, false,
                                      $messagesearchstring, 'm'.$message->id, $strcontext);
                 echo html_writer::end_tag('div');
                 echo html_writer::end_tag('td');
@@ -1393,7 +1396,7 @@ function message_contact_link($userid, $linktype='add', $return=false, $script=n
  * echo or return a link to take the user to the full message history between themselves and another user
  *
  * @staticvar type $strmessagehistory
- * @param int $userid1 the ID of the current user
+ * @param int $userid1 the ID of the user displayed on the left (usually the current user)
  * @param int $userid2 the ID of the other user
  * @param bool $return true to return the link as a string. False to echo the link.
  * @param string $keywords any keywords to highlight in the message history
@@ -1403,7 +1406,6 @@ function message_contact_link($userid, $linktype='add', $return=false, $script=n
  */
 function message_history_link($userid1, $userid2, $return=false, $keywords='', $position='', $linktext='') {
     global $OUTPUT;
-
     static $strmessagehistory;
 
     if (empty($strmessagehistory)) {
@@ -1437,7 +1439,7 @@ function message_history_link($userid1, $userid2, $return=false, $keywords='', $
             'scrollbars' => true,
             'resizable' => true);
 
-    $link = new moodle_url('/message/index.php?history='.MESSAGE_HISTORY_ALL."&user=$userid1&id=$userid2$keywords$position");
+    $link = new moodle_url('/message/index.php?history='.MESSAGE_HISTORY_ALL."&user1=$userid1&user2=$userid2$keywords$position");
     $action = null;
     $str = $OUTPUT->action_link($link, $fulllink, $action, array('title' => $strmessagehistory));
 
index b7f559e..e9a9031 100644 (file)
@@ -98,7 +98,7 @@ $string['errornosubmissions'] = 'There are no submissions to download';
 $string['existingfiledeleted'] = 'Existing file has been deleted: {$a}';
 $string['failedupdatefeedback'] = 'Failed to update submission feedback for user {$a}';
 $string['feedback'] = 'Feedback';
-$string['feedbackfromteacher'] = 'Feedback from the {$a}';
+$string['feedbackfromteacher'] = 'Feedback from {$a}';
 $string['feedbackupdated'] = 'Submissions feedback updated for {$a} people';
 $string['finalize'] = 'Prevent submission updates';
 $string['finalizeerror'] = 'An error occurred and that submission could not be finalised';
index 86c5832..60917e1 100644 (file)
@@ -2372,6 +2372,7 @@ class mod_assignment_grading_form extends moodleform {
         $editoroptions['noclean'] = false;
         $editoroptions['maxfiles'] = 0; //TODO: no files for now, we need to first implement assignment_feedback area, integration with gradebook, files support in quickgrading, etc. (skodak)
         $editoroptions['maxbytes'] = $this->_customdata->maxbytes;
+        $editoroptions['context'] = $this->_customdata->context;
         return $editoroptions;
     }
 
index 05b0e1e..f9ce0fa 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 require_once("$CFG->libdir/simpletest/portfolio_testclass.php");
 require_once("$CFG->dirroot/mod/assignment/lib.php");
-require_once("$CFG->dirroot/$CFG->admin/generator.php");
 require_once("$CFG->dirroot/mod/assignment/locallib.php");
 
 Mock::generate('assignment_portfolio_caller', 'mock_caller');
index 54532f7..b705528 100644 (file)
@@ -38,7 +38,12 @@ class assignment_online extends assignment_base {
 
         if ($editmode) {
             // prepare form and process submitted data
-            $editoroptions = array('noclean'=>false, 'maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$this->course->maxbytes);
+            $editoroptions = array(
+                'noclean'  => false,
+                'maxfiles' => EDITOR_UNLIMITED_FILES,
+                'maxbytes' => $this->course->maxbytes,
+                'context'  => $this->context
+            );
 
             $data = new stdClass();
             $data->id         = $this->cm->id;
index 6d66523..d9e6b37 100644 (file)
@@ -135,7 +135,7 @@ case 'update':
                 $send_user_list = true;
                 $users = chat_format_userlist(chat_get_users($chatuser->chatid, $chatuser->groupid, $cm->groupingid), $course);
             }
-            if ($html = chat_format_message_theme($message, $chatuser->course, $USER, $theme)) {
+            if ($html = chat_format_message_theme($message, $chatuser, $USER, $cm->groupingid, $theme)) {
                 $message->mymessage = ($USER->id == $message->userid);
                 $message->message  = $html->html;
                 if (!empty($html->type)) {
index a59a5e2..a462b6e 100644 (file)
@@ -898,13 +898,14 @@ function chat_format_message($message, $courseid, $currentuser, $chat_lastrow=NU
 
 /**
  * @global object
- * @param object $message
- * @param int $courseid
- * @param object $currentuser
- * @param string $chat_lastrow
+ * @param object $message message to be displayed.
+ * @param mixed $chatuser user chat data
+ * @param object $currentuser current user for whom the message should be displayed.
+ * @param int $groupingid course module grouping id
+ * @param string $theme name of the chat theme.
  * @return bool|string Returns HTML or false
  */
-function chat_format_message_theme ($message, $courseid, $currentuser, $theme = 'bubble') {
+function chat_format_message_theme ($message, $chatuser, $currentuser, $groupingid, $theme = 'bubble') {
     global $CFG, $USER, $OUTPUT, $COURSE, $DB;
 
     static $users;     // Cache user lookups
@@ -927,8 +928,10 @@ function chat_format_message_theme ($message, $courseid, $currentuser, $theme =
     $tz = get_user_timezone($currentuser->timezone);
     $USER->timezone = $tz;
 
-    if (empty($courseid)) {
+    if (empty($chatuser->course)) {
         $courseid = $COURSE->id;
+    } else {
+        $courseid = $chatuser->course;
     }
 
     $message->strtime = userdate($message->timestamp, get_string('strftimemessage', 'chat'), $tz);
@@ -968,6 +971,9 @@ function chat_format_message_theme ($message, $courseid, $currentuser, $theme =
     $special = false;
     $outtime = $message->strtime;
 
+    //Initilise output variable.
+    $outmain = '';
+
     if (substr($text, 0, 5) == 'beep ') {
         $special = true;
         /// It's a beep!
@@ -979,9 +985,17 @@ function chat_format_message_theme ($message, $courseid, $currentuser, $theme =
         } else if ($beepwho == $currentuser->id) {  // current user
             $outmain = get_string('messagebeepsyou', 'chat', fullname($sender));
         } else if ($sender->id == $currentuser->id) {  //something is not caught?
-
-            $receiver = $DB->get_record('user', array('id'=>$beepwho), 'id,picture,firstname,lastname');
-            $outmain = get_string('messageyoubeep', 'chat', fullname($receiver));
+            //allow beep for a active chat user only, else user can beep anyone and get fullname
+            if (!empty($chatuser) && is_numeric($beepwho)) {
+               $chatusers = chat_get_users($chatuser->chatid, $chatuser->groupid, $groupingid);
+               if (array_key_exists($beepwho, $chatusers)) {
+                   $outmain = get_string('messageyoubeep', 'chat', fullname($chatusers[$beepwho]));
+               } else {
+                   $outmain = get_string('messageyoubeep', 'chat', $beepwho);
+               }
+            } else {
+                $outmain = get_string('messageyoubeep', 'chat', $beepwho);
+            }
         }
     } else if (substr($text, 0, 1) == '/') {     /// It's a user command
         $special = true;
@@ -1043,7 +1057,12 @@ function chat_format_message_theme ($message, $courseid, $currentuser, $theme =
         $result->html = str_replace($patterns, $replacements, $chattheme_cfg->user_message);
     }
 
-    return $result;
+    //When user beeps other user, then don't show any timestamp to other users in chat.
+    if (('' === $outmain) && $special) {
+        return false;
+    } else {
+        return $result;
+    }
 }
 
 
index c8f1696..1069a43 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 require_once("$CFG->libdir/simpletest/portfolio_testclass.php");
 require_once("$CFG->dirroot/mod/chat/lib.php");
-require_once("$CFG->dirroot/$CFG->admin/generator.php");
 
 /*
  * TODO: The portfolio unit tests were obselete and did not work.
index 9387422..c069dc1 100644 (file)
@@ -31,7 +31,7 @@ $string['displayhorizontal'] = 'Display horizontally';
 $string['displaymode'] = 'Display mode';
 $string['displayvertical'] = 'Display vertically';
 $string['expired'] = 'Sorry, this activity closed on {$a} and is no longer available';
-$string['fillinatleastoneoption'] = 'You need to provide at least two possible answers.';
+$string['atleastoneoption'] = 'You need to provide at least one possible answer.';
 $string['full'] = '(Full)';
 $string['havetologin'] = 'You have to log in before you can submit your choice';
 $string['choice'] = 'Choice';
index 1f65611..349d79b 100644 (file)
@@ -127,11 +127,7 @@ class mod_choice_mod_form extends moodleform_mod {
         }
 
         if ($choices < 1) {
-           $errors['option[0]'] = get_string('fillinatleastoneoption', 'choice');
-        }
-
-        if ($choices < 2) {
-           $errors['option[1]'] = get_string('fillinatleastoneoption', 'choice');
+           $errors['option[0]'] = get_string('atleastoneoption', 'choice');
         }
 
         return $errors;
index 792bdcb..a31312f 100644 (file)
@@ -5,7 +5,7 @@
 //  This fragment is called by /admin/index.php
 ////////////////////////////////////////////////////////////////////////////////
 
-$module->version  = 2010101300;
+$module->version  = 2010101301;
 $module->requires = 2010080300;  // Requires this Moodle version
 $module->cron     = 0;
 
index 626ef7f..4ea08e4 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 require_once("$CFG->libdir/simpletest/portfolio_testclass.php");
 require_once("$CFG->dirroot/mod/data/lib.php");
-require_once("$CFG->dirroot/$CFG->admin/generator.php");
 require_once("$CFG->dirroot/mod/data/locallib.php");
 
 /*
index ce9b399..5e5df4c 100644 (file)
@@ -49,6 +49,10 @@ class feedback_item_label extends feedback_item_base {
         //preparing the editor for new file-api
         $item->presentationformat = FORMAT_HTML;
         $item->presentationtrust = 1;
+
+        // Append editor context to presentation options, giving preference to existing context.
+        $this->presentationoptions = array_merge(array('context' => $this->context), $this->presentationoptions);
+
         $item = file_prepare_standard_editor($item,
                                             'presentation', //name of the form element
                                             $this->presentationoptions,
index d6d6da0..503ef15 100644 (file)
@@ -26,7 +26,6 @@
 
 require_once("$CFG->libdir/simpletest/portfolio_testclass.php");
 require_once("$CFG->dirroot/mod/forum/lib.php");
-require_once("$CFG->dirroot/$CFG->admin/generator.php");
 
 /*
  * TODO: The portfolio unit tests were obselete and did not work.
index 066260b..78ac42a 100644 (file)
@@ -2,7 +2,6 @@
 require_once("$CFG->libdir/simpletest/portfolio_testclass.php");
 require_once("$CFG->dirroot/mod/glossary/lib.php");
 require_once("$CFG->dirroot/mod/glossary/locallib.php");
-require_once("$CFG->dirroot/$CFG->admin/generator.php");
 
 /*
  * TODO: The portfolio unit tests were obselete and did not work.
index e9bffb8..f725cae 100644 (file)
@@ -84,6 +84,7 @@ if ($edit) {
     $data = $editpage->properties();
     $data->pageid = $editpage->id;
     $data->id = $cm->id;
+    $editoroptions['context'] = $context;
     $data = file_prepare_standard_editor($data, 'contents', $editoroptions, $context, 'mod_lesson', 'page_contents',  $editpage->id);
     $mform->set_data($data);
     $PAGE->navbar->add(get_string('edit'), new moodle_url('/mod/lesson/edit.php', array('id'=>$id)));
index 7830630..6319c9f 100644 (file)
@@ -567,16 +567,16 @@ function xmldb_quiz_upgrade($oldversion) {
                 $pbar = new progress_bar('q15upgrade');
                 $pbar->create();
                 $a = new stdClass();
-                $a->todo = count($oldattempts);
+                $a->outof = count($oldattempts);
                 $a->done = 0;
-                $pbar->update($a->done, $a->todo,
+                $pbar->update($a->done, $a->outof,
                         get_string('upgradingveryoldquizattempts', 'quiz', $a));
 
                 foreach ($oldattempts as $oldattempt) {
                     quiz_upgrade_very_old_question_sessions($oldattempt);
 
                     $a->done += 1;
-                    $pbar->update($a->done, $a->todo,
+                    $pbar->update($a->done, $a->outof,
                             get_string('upgradingveryoldquizattempts', 'quiz', $a));
                 }
             }
index df4668a..15a9d8f 100644 (file)
@@ -453,8 +453,7 @@ echo '<div id="module" class="module">';
 echo '<div class="bd">';
 $questionbank->display('editq',
         $pagevars['qpage'],
-        $pagevars['qperpage'], $pagevars['qsortorder'],
-        $pagevars['qsortorderdecoded'],
+        $pagevars['qperpage'],
         $pagevars['cat'], $pagevars['recurse'], $pagevars['showhidden'],
         $pagevars['showquestiontext']);
 echo '</div>';
index 21ad231..9f653c0 100644 (file)
@@ -534,23 +534,20 @@ function quiz_print_question_list($quiz, $pageurl, $allowdelete, $reordertool,
                     $reordercheckboxlabel = '<label for="s' . $question->id . '">';
                     $reordercheckboxlabelclose = '</label>';
                 }
-                if (!$quiz->shufflequestions) {
-                    // Print and increment question number
-                    $questioncountstring = '';
-                    if ($questioncount>999 || ($reordertool && $questioncount>99)) {
-                        $questioncountstring =
-                                "$reordercheckboxlabel<small>$questioncount</small>" .
-                                $reordercheckboxlabelclose . $reordercheckbox;
+                if ($question->length == 0) {
+                    $qnodisplay = get_string('infoshort', 'quiz');
+                } else if ($quiz->shufflequestions) {
+                    $qnodisplay = '?';
+                } else {
+                    if ($qno > 999 || ($reordertool && $qno > 99)) {
+                        $qnodisplay = html_writer::tag('small', $qno);
                     } else {
-                        $questioncountstring = $reordercheckboxlabel . $questioncount .
-                                $reordercheckboxlabelclose . $reordercheckbox;
+                        $qnodisplay = $qno;
                     }
-                    echo $questioncountstring;
                     $qno += $question->length;
-                } else {
-                    echo "$reordercheckboxlabel ? $reordercheckboxlabelclose" .
-                            " $reordercheckbox";
                 }
+                echo $reordercheckboxlabel . $qnodisplay . $reordercheckboxlabelclose .
+                        $reordercheckbox;
 
                 ?>
         </div>
@@ -1132,8 +1129,8 @@ class quiz_question_bank_view extends question_bank_view {
         return new moodle_url('/mod/quiz/edit.php', $params);
     }
 
-    public function display($tabname, $page, $perpage, $sortorder,
-            $sortorderdecoded, $cat, $recurse, $showhidden, $showquestiontext) {
+    public function display($tabname, $page, $perpage, $cat,
+            $recurse, $showhidden, $showquestiontext) {
         global $OUTPUT;
         if ($this->process_actions_needing_ui()) {
             return;
@@ -1153,7 +1150,7 @@ class quiz_question_bank_view extends question_bank_view {
         // continues with list of questions
         $this->display_question_list($this->contexts->having_one_edit_tab_cap($tabname),
                 $this->baseurl, $cat, $this->cm, $recurse, $page,
-                $perpage, $showhidden, $sortorder, $sortorderdecoded, $showquestiontext,
+                $perpage, $showhidden, $showquestiontext,
                 $this->contexts->having_cap('moodle/question:add'));
 
         $this->display_options($recurse, $showhidden, $showquestiontext);
@@ -1186,15 +1183,14 @@ class quiz_question_bank_view extends question_bank_view {
         echo '</span></div></div>';
     }
 
-    protected function display_options($recurse = 1, $showhidden = false,
-            $showquestiontext = false) {
+    protected function display_options($recurse, $showhidden, $showquestiontext) {
         echo '<form method="get" action="edit.php" id="displayoptions">';
         echo "<fieldset class='invisiblefieldset'>";
         echo html_writer::input_hidden_params($this->baseurl,
                 array('recurse', 'showhidden', 'showquestiontext'));
-        $this->display_category_form_checkbox('recurse',
+        $this->display_category_form_checkbox('recurse', $recurse,
                 get_string('includesubcategories', 'question'));
-        $this->display_category_form_checkbox('showhidden',
+        $this->display_category_form_checkbox('showhidden', $showhidden,
                 get_string('showhidden', 'question'));
         echo '<noscript><div class="centerpara"><input type="submit" value="' .
                 get_string('go') . '" />';
index 479579c..3feae77 100644 (file)
@@ -121,7 +121,6 @@ $string['cannotinsertrandomquestion'] = 'Could not insert new random question!';
 $string['cannotloadquestion'] = 'Could not load question options';
 $string['cannotloadtypeinfo'] = 'Unable to load questiontype specific question information';
 $string['cannotopen'] = 'Cannot open export file ({$a})';
-$string['cannotread'] = 'Cannot read import file (or file is empty)';
 $string['cannotrestore'] = 'Could not restore question sessions';
 $string['cannotreviewopen'] = 'You cannot review this attempt, it is still open.';
 $string['cannotsavelayout'] = 'Could not save layout';
index cde3701..a81aa5e 100644 (file)
@@ -588,6 +588,7 @@ function quiz_upgrade_grades() {
  */
 function quiz_grade_item_update($quiz, $grades = null) {
     global $CFG, $OUTPUT;
+    require_once($CFG->dirroot . '/mod/quiz/locallib.php');
     require_once($CFG->libdir.'/gradelib.php');
 
     if (array_key_exists('cmidnumber', $quiz)) { // may not be always present
index 601f9a5..0e1ea24 100644 (file)
@@ -414,7 +414,9 @@ function quiz_update_sumgrades($quiz) {
             WHERE id = ?';
     $DB->execute($sql, array($quiz->id));
     $quiz->sumgrades = $DB->get_field('quiz', 'sumgrades', array('id' => $quiz->id));
-    if ($quiz->sumgrades < 0.000005) {
+    if ($quiz->sumgrades < 0.000005 && quiz_clean_layout($quiz->questions, true)) {
+        // If there is at least one question in the quiz, and the sumgrades has been
+        // set to 0, then also set the maximum possible grade to 0.
         quiz_set_grade(0, $quiz);
     }
 }
@@ -542,25 +544,21 @@ function quiz_save_best_grade($quiz, $userid = null, $attempts = array()) {
 /**
  * Calculate the overall grade for a quiz given a number of attempts by a particular user.
  *
- * @return float          The overall grade
- * @param object $quiz    The quiz for which the best grade is to be calculated
- * @param array $attempts An array of all the attempts of the user at the quiz
+ * @param object $quiz    the quiz settings object.
+ * @param array $attempts an array of all the user's attempts at this quiz in order.
+ * @return float          the overall grade
  */
 function quiz_calculate_best_grade($quiz, $attempts) {
 
     switch ($quiz->grademethod) {
 
         case QUIZ_ATTEMPTFIRST:
-            foreach ($attempts as $attempt) {
-                return $attempt->sumgrades;
-            }
-            return $final;
+            $firstattempt = reset($attempts);
+            return $firstattempt->sumgrades;
 
         case QUIZ_ATTEMPTLAST:
-            foreach ($attempts as $attempt) {
-                $final = $attempt->sumgrades;
-            }
-            return $final;
+            $lastattempt = end($attempts);
+            return $lastattempt->sumgrades;
 
         case QUIZ_GRADEAVERAGE:
             $sum = 0;
@@ -576,8 +574,8 @@ function quiz_calculate_best_grade($quiz, $attempts) {
             }
             return $sum / $count;
 
-        default:
         case QUIZ_GRADEHIGHEST:
+        default:
             $max = null;
             foreach ($attempts as $attempt) {
                 if ($attempt->sumgrades > $max) {
index 0a6b765..49d2cb3 100644 (file)
@@ -610,7 +610,7 @@ class mod_quiz_renderer extends plugin_renderer_base {
         $output .= $this->view_information($course, $quiz, $cm, $context, $messages);
         $guestno = html_writer::tag('p', get_string('guestsno', 'quiz'));
         $liketologin = html_writer::tag('p', get_string('liketologin'));
-        $output .= $this->confirm($guestno.'\n\n'.$liketologin.'\n', get_login_url(),
+        $output .= $this->confirm($guestno."\n\n".$liketologin."\n", get_login_url(),
                 get_referer(false));
         return $output;
     }
@@ -631,7 +631,7 @@ class mod_quiz_renderer extends plugin_renderer_base {
         $youneedtoenrol = html_writer::tag('p', get_string('youneedtoenrol', 'quiz'));
         $button = html_writer::tag('p',
                 $this->continue_button($CFG->wwwroot . '/course/view.php?id=' . $course->id));
-        $output .= $this->box($youneedtoenrol.'\n\n'.$button.'\n', 'generalbox', 'notice');
+        $output .= $this->box($youneedtoenrol."\n\n".$button."\n", 'generalbox', 'notice');
         return $output;
     }
 
@@ -867,7 +867,7 @@ class mod_quiz_renderer extends plugin_renderer_base {
         if ($viewobj->mygradeoverridden) {
 
             $resultinfo .= html_writer::tag('p', get_string('overriddennotice', 'grades'),
-                    array('class' => 'overriddennotice')).'\n';
+                    array('class' => 'overriddennotice'))."\n";
         }
         if ($viewobj->gradebookfeedback) {
             $resultinfo .= $this->heading(get_string('comment', 'quiz'), 3, 'main');
@@ -878,7 +878,7 @@ class mod_quiz_renderer extends plugin_renderer_base {
             $resultinfo .= $this->heading(get_string('overallfeedback', 'quiz'), 3, 'main');
             $resultinfo .= html_writer::tag('p',
                     quiz_feedback_for_grade($viewobj->mygrade, $quiz, $context),
-                    array('class' => 'quizgradefeedback')).'\n';
+                    array('class' => 'quizgradefeedback'))."\n";
         }
 
         if ($resultinfo) {
index 367ec4e..70af921 100644 (file)
@@ -26,7 +26,6 @@
 $string['allattempts'] = 'Show all attempts';
 $string['allattemptscontributetograde'] = 'All attempts contribute to final grade for user.';
 $string['allstudents'] = 'Show all {$a}';
-$string['attemptprogress'] = 'Attempt {$a->done} of {$a->todo}';
 $string['attemptsonly'] = 'Show {$a} with attempts only';
 $string['attemptsprepage'] = 'Attempts shown per page';
 $string['deleteselected'] = 'Delete selected attempts';
@@ -56,7 +55,6 @@ $string['pluginname'] = 'Grades';
 $string['preferencespage'] = 'Preferences just for this page';
 $string['preferencessave'] = 'Show report';
 $string['preferencesuser'] = 'Your preferences for this report';
-$string['qprogress'] = 'Question {$a->done} of {$a->todo}';
 $string['regrade'] = 'Regrade';
 $string['regradeall'] = 'Regrade all';
 $string['regradealldry'] = 'Dry run a full regrade';
index de70778..aec7809 100644 (file)
@@ -117,11 +117,7 @@ class quiz_overview_report extends quiz_attempt_report {
         }
 
         // Load the required questions.
-        if ($detailedmarks) {
-            $questions = quiz_report_get_significant_questions($quiz);
-        } else {
-            $questions = array();
-        }
+        $questions = quiz_report_get_significant_questions($quiz);
 
         $table = new quiz_report_overview_table($quiz, $this->context, $qmsubselect,
                 $groupstudents, $students, $detailedmarks, $questions, $candelete,
index 2c8f534..d7875e3 100644 (file)
@@ -209,7 +209,7 @@ class quiz_statistics_report extends quiz_default_report {
             // Back to overview link.
             echo $OUTPUT->box('<a href="' . $reporturl->out() . '">' .
                     get_string('backtoquizreport', 'quiz_statistics') . '</a>',
-                    'boxaligncenter generalbox boxwidthnormal mdl-align');
+                    'backtomainstats boxaligncenter generalbox boxwidthnormal mdl-align');
 
         } else if ($qid) {
             // Report on an individual sub-question indexed questionid.
@@ -313,7 +313,7 @@ class quiz_statistics_report extends quiz_default_report {
 
         echo $OUTPUT->box(format_text($question->questiontext, $question->questiontextformat,
                 array('overflowdiv' => true)) . $actions,
-                'boxaligncenter generalbox boxwidthnormal mdl-align');
+                'questiontext boxaligncenter generalbox boxwidthnormal mdl-align');
 
         echo $OUTPUT->heading(get_string('questionstatistics', 'quiz_statistics'));
         echo html_writer::table($questionstatstable);
index 3aa9022..1c030f4 100644 (file)
@@ -98,12 +98,18 @@ class quiz_statistics_response_analyser {
 
     /**
      * @return bool whether this analysis has a response class more than one
-     *      different acutal response.
+     *      different acutal response, or if the actual response is different from
+     *      the model response.
      */
     public function has_actual_responses() {
         foreach ($this->responseclasses as $subpartid => $partclasses) {
-            foreach ($partclasses as $responseclassid => $notused) {
-                if (count($this->responses[$subpartid][$responseclassid]) > 1) {
+            foreach ($partclasses as $responseclassid => $modelresponse) {
+                $numresponses = count($this->responses[$subpartid][$responseclassid]);
+                if ($numresponses > 1) {
+                    return true;
+                }
+                $actualresponse = key($this->responses[$subpartid][$responseclassid]);
+                if ($numresponses == 1 && $actualresponse != $modelresponse->responseclass) {
                     return true;
                 }
             }
index 9d3c4ab..cd36bd9 100644 (file)
@@ -173,7 +173,7 @@ if ($attempt->timefinish) {
     );
     $summarydata['timetaken'] = array(
         'title'   => get_string('timetaken', 'quiz'),
-        'content' => format_time($timetaken),
+        'content' => $timetaken,
     );
 }
 
index be2d4ea..60d83d4 100644 (file)
@@ -374,6 +374,7 @@ bank window's title is prominent enough*/
 .ie6#page-mod-quiz-edit div.question div.content .questionname {width:20%;}
 .ie6#page-mod-quiz-edit .editq div.question div.content .randomquestioncategory a{width:40%;}
 .ie6#page-mod-quiz-edit .reorder .questioncontentcontainer .randomquestioncategory label{width: 35%;}
+.qnum label {padding-right: 0.25em;}
 
 /** settings.php */
 #adminquizreviewoptions {margin-bottom: 0.5em;}
index e67fd70..88875ce 100644 (file)
@@ -60,7 +60,7 @@ require_login($course->id, false, $cm);
 
 if ($usertrack = scorm_get_tracks($scoid, $USER->id, $attempt)) {
     //according to SCORM 2004 spec(RTE V1, 4.2.8), only cmi.exit==suspend should allow previous datamodel elements on re-launch
-    if ($scorm->version != "SCORM_1.3" || (isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} == 'suspend'))) {
+    if (!scorm_version_check($scorm->version, SCORM_13) || (isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} == 'suspend'))) {
         foreach ($usertrack as $key => $value) {
             $userdata->$key = addslashes_js($value);
         }
@@ -93,6 +93,9 @@ if ($scodatas = scorm_get_sco($scoid, SCO_DATA)) {
 if (!$sco = scorm_get_sco($scoid)) {
     print_error('cannotfindsco', 'scorm');
 }
+if (scorm_version_check($scorm->version, SCORM_13)) {
+    $userdata->{'cmi.scaled_passing_score'} = $DB->get_field('scorm_seq_objective', 'minnormalizedmeasure', array('scoid'=>$scoid));
+}
 $scorm->version = strtolower(clean_param($scorm->version, PARAM_SAFEDIR));   // Just to be safe
 if (file_exists($CFG->dirroot.'/mod/scorm/datamodels/'.$scorm->version.'.js.php')) {
     include_once($CFG->dirroot.'/mod/scorm/datamodels/'.$scorm->version.'.js.php');
index 6ca2fd0..b84547a 100644 (file)
@@ -85,11 +85,11 @@ var logRow = 0;
 var logPopUpWindow = "N";
 var debugSCORMVersion = '<?php echo $scorm->version; ?>';
 <?php
-   $LMS_prefix = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'LMS' : '';
-   $LMS_api = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'API' : 'API_1484_11';
+   $LMS_prefix = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'LMS' : '';
+   $LMS_api = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'API' : 'API_1484_11';
 
    $LMS_elements = array();
-   if ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) {
+   if (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) {
        $LMS_elements = array(   'cmi.core._children',
                                 'cmi.core.student_id',
                                 'cmi.core.student_name',
@@ -653,8 +653,8 @@ function UpdateLog(s) {
         + '             id="commitButton"'
         + '             name="commitButton">'
         + '            <input type="button"'
-        + '             value="<?php echo $scorm->version == 'scorm_12' ? 'LMSFinish' : 'Terminate'; ?>()  "'
-        + '             onclick="try<?php echo $scorm->version == 'scorm_12' ? 'LMSFinish' : 'LMSTerminate'; ?>();"'
+        + '             value="<?php echo scorm_version_check($scorm->version, SCORM_12) ? 'LMSFinish' : 'Terminate'; ?>()  "'
+        + '             onclick="try<?php echo scorm_version_check($scorm->version, SCORM_12) ? 'LMSFinish' : 'LMSTerminate'; ?>();"'
         + '             id="finishButton"'
         + '             name="finishButton">'
         + '         </td>'
index b03d9b3..9b5d487 100644 (file)
@@ -205,7 +205,7 @@ function SCORMapi1_3() {
         'cmi.learner_preference.delivery_speed':{'defaultvalue':'1', 'format':CMIDecimal, 'range':speed_range, 'mod':'rw'},
         'cmi.learner_preference.audio_captioning':{'defaultvalue':'0', 'format':CMISInteger, 'range':text_range, 'mod':'rw'},
         'cmi.location':{'defaultvalue':<?php echo isset($userdata->{'cmi.location'})?'\''.$userdata->{'cmi.location'}.'\'':'null' ?>, 'format':CMIString1000, 'mod':'rw'},
-        'cmi.max_time_allowed':{'defaultvalue':<?php echo isset($userdata->maxtimeallowed)?'\''.$userdata->maxtimeallowed.'\'':'null' ?>, 'mod':'r'},
+        'cmi.max_time_allowed':{'defaultvalue':<?php echo isset($userdata->attemptAbsoluteDurationLimit)?'\''.$userdata->attemptAbsoluteDurationLimit.'\'':'null' ?>, 'mod':'r'},
         'cmi.mode':{'defaultvalue':'<?php echo $userdata->mode ?>', 'mod':'r'},
         'cmi.objectives._children':{'defaultvalue':objectives_children, 'mod':'r'},
         'cmi.objectives._count':{'mod':'r', 'defaultvalue':'0'},
index 8bee8d8..cc77fa7 100644 (file)
@@ -17,7 +17,7 @@
 function scorm_get_resources($blocks) {
     $resources = array();
     foreach ($blocks as $block) {
-        if ($block['name'] == 'RESOURCES') {
+        if ($block['name'] == 'RESOURCES' && isset($block['children'])) {
             foreach ($block['children'] as $resource) {
                 if ($resource['name'] == 'RESOURCE') {
                     $resources[addslashes_js($resource['attrs']['IDENTIFIER'])] = $resource['attrs'];
@@ -29,12 +29,14 @@ function scorm_get_resources($blocks) {
 }
 
 function scorm_get_manifest($blocks, $scoes) {
+    global $OUTPUT;
     static $parents = array();
     static $resources;
 
     static $manifest;
     static $organization;
 
+    $manifestresourcesnotfound = array();
     if (count($blocks) > 0) {
         foreach ($blocks as $block) {
             switch ($block['name']) {
@@ -130,11 +132,16 @@ function scorm_get_manifest($blocks, $scoes) {
                         if (isset($resources[$idref]['XML:BASE'])) {
                             $base = $resources[$idref]['XML:BASE'];
                         }
-                        $scoes->elements[$manifest][$organization][$identifier]->launch = $base.$resources[$idref]['HREF'];
-                        if (empty($resources[$idref]['ADLCP:SCORMTYPE'])) {
-                            $resources[$idref]['ADLCP:SCORMTYPE'] = 'asset';
+                        if (!isset($resources[$idref])) {
+                            $manifestresourcesnotfound[] = $idref;
+                            $scoes->elements[$manifest][$organization][$identifier]->launch = '';
+                        } else {
+                            $scoes->elements[$manifest][$organization][$identifier]->launch = $base.$resources[$idref]['HREF'];
+                            if (empty($resources[$idref]['ADLCP:SCORMTYPE'])) {
+                                $resources[$idref]['ADLCP:SCORMTYPE'] = 'asset';
+                            }
+                            $scoes->elements[$manifest][$organization][$identifier]->scormtype = $resources[$idref]['ADLCP:SCORMTYPE'];
                         }
-                        $scoes->elements[$manifest][$organization][$identifier]->scormtype = $resources[$idref]['ADLCP:SCORMTYPE'];
                     }
 
                     $parent = new stdClass();
@@ -473,6 +480,13 @@ function scorm_get_manifest($blocks, $scoes) {
             }
         }
     }
+    if (!empty($manifestresourcesnotfound)) {
+        //throw warning to user to let them know manifest contains references to resources that don't appear to exist.
+        if (!defined('DEBUGGING_PRINTED')) { //prevent redirect and display warning
+            define('DEBUGGING_PRINTED', 1);
+        }
+        echo $OUTPUT->notification(get_string('invalidmanifestresource', 'scorm').' '. implode(', ',$manifestresourcesnotfound));
+    }
     return $scoes;
 }
 
@@ -586,7 +600,7 @@ function scorm_parse_scorm($scorm, $manifest) {
                             $obj->primaryobj = $objective->primaryobj;
                             $obj->satisfiedbumeasure = $objective->satisfiedbymeasure;
                             $obj->objectiveid = $objective->objectiveid;
-                            $obj->minnormalizedmeasure = $objective->minnormalizedmeasure;
+                            $obj->minnormalizedmeasure = trim($objective->minnormalizedmeasure);
                             $objectiveid = $DB->insert_record('scorm_seq_objective', $obj);
                             if (isset($objective->mapinfos)) {
                                 foreach ($objective->mapinfos as $objmapinfo) {
index ab1d6e1..ca356ba 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="mod/scorm/db" VERSION="20090420" COMMENT="XMLDB file for Moodle mod/scorm"
+<XMLDB PATH="mod/scorm/db" VERSION="20110731" COMMENT="XMLDB file for Moodle mod/scorm"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
 >
         <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="scoid"/>
         <FIELD NAME="scoid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="id" NEXT="primaryobj"/>
         <FIELD NAME="primaryobj" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" PREVIOUS="scoid" NEXT="objectiveid"/>
-        <FIELD NAME="objectiveid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="primaryobj" NEXT="satisfiedbymeasure"/>
+        <FIELD NAME="objectiveid" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="primaryobj" NEXT="satisfiedbymeasure"/>
         <FIELD NAME="satisfiedbymeasure" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="false" DEFAULT="1" SEQUENCE="false" PREVIOUS="objectiveid" NEXT="minnormalizedmeasure"/>
         <FIELD NAME="minnormalizedmeasure" TYPE="float" LENGTH="11" NOTNULL="true" UNSIGNED="true" DEFAULT="0.0000" SEQUENCE="false" DECIMALS="4" PREVIOUS="satisfiedbymeasure"/>
       </FIELDS>
       </KEYS>
     </TABLE>
   </TABLES>
-</XMLDB>
+</XMLDB>
\ No newline at end of file
index 31d5b55..2335654 100644 (file)
@@ -547,6 +547,30 @@ function xmldb_scorm_upgrade($oldversion) {
         upgrade_mod_savepoint(true, 2011021402, 'scorm');
     }
 
+    if ($oldversion < 2011073100) {
+        // change field type of objectiveid
+        $table = new xmldb_table('scorm_seq_objective');
+        $field = new xmldb_field('objectiveid', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'primaryobj');
+        $dbman->change_field_type($table, $field);
+        upgrade_mod_savepoint(true, 2011073100, 'scorm');
+    }
+
+    if ($oldversion < 2011080100) {
+        //MDL-28295 the behaviour of pop-up windows has now changed - it now loads the full Player in the window
+        //because of this, pop-up windows now include the TOC and the nav bar - disabling these for existing SCORMS
+        //as it is a change that most users won't expect.
+        //get all SCORMS that use a new window.
+        require_once($CFG->dirroot."/mod/scorm/lib.php");
+        $rs = $DB->get_recordset('scorm', array('popup' => 1), '', 'id,hidetoc,hidenav');
+        foreach ($rs as $scorm) {
+            $scorm->hidetoc = SCORM_TOC_DISABLED;
+            $scorm->hidenav = 1;
+            $DB->update_record('scorm', $scorm);
+        }
+        $rs->close();
+
+        upgrade_mod_savepoint(true, 2011080100, 'scorm');
+    }
     return true;
 }
 
index 28f7956..b972a29 100644 (file)
@@ -146,6 +146,7 @@ $string['incomplete'] = 'Incomplete';
 $string['info'] = 'Info';
 $string['interactions'] = 'Interactions';
 $string['invalidactivity'] = 'Scorm activity is incorrect';
+$string['invalidmanifestresource'] = 'WARNING: The following resources were referenced in your manifest but couldn\'t be found:';
 $string['last'] = 'Last accessed on';
 $string['lastaccess'] = 'Last access';
 $string['lastattempt'] = 'Last attempt';
@@ -300,4 +301,3 @@ Handling of Multiple Attempts
 $string['whatgradedesc'] = 'This preference sets the default attempts grading';
 $string['width'] = 'Width';
 $string['window'] = 'Window';
-$string['zlibwarning'] = 'Warning: PHP Zlib compression has been enabled on this site, some users may experience issues loading SCORM objects in certain web browsers.';
index 14690f2..8e3dfb2 100644 (file)
@@ -34,6 +34,11 @@ define('SCORM_TOC_HIDDEN', 1);
 define('SCORM_TOC_POPUP', 2);
 define('SCORM_TOC_DISABLED', 3);
 
+//used to check what SCORM version is being used.
+define('SCORM_12', 1);
+define('SCORM_13', 2);
+define('SCORM_AICC', 3);
+
 /**
  * Given an object containing all the necessary data,
  * (defined by the form in mod_form.php) this function
@@ -1084,3 +1089,38 @@ function scorm_page_type_list($pagetype, $parentcontext, $currentcontext) {
     $module_pagetype = array('mod-scorm-*'=>get_string('page-mod-scorm-x', 'scorm'));
     return $module_pagetype;
 }
+
+/**
+ * Returns the SCORM version used.
+ * @param string $scormversion comes from $scorm->version
+ * @param string $version one of the defined vars SCORM_12, SCORM_13, SCORM_AICC (or empty)
+ * @return Scorm version.
+ */
+function scorm_version_check($scormversion, $version='') {
+    $scormversion = trim(strtolower($scormversion));
+    if (empty($version) || $version==SCORM_12) {
+        if ($scormversion == 'scorm_12' || $scormversion == 'scorm_1.2') {
+            return SCORM_12;
+        }
+        if (!empty($version)) {
+            return false;
+        }
+    }
+    if (empty($version) || $version == SCORM_13) {
+        if ($scormversion == 'scorm_13' || $scormversion == 'scorm_1.3') {
+            return SCORM_13;
+        }
+        if (!empty($version)) {
+            return false;
+        }
+    }
+    if (empty($version) || $version == SCORM_AICC) {
+        if (strpos($scormversion, 'aicc')) {
+            return SCORM_AICC;
+        }
+        if (!empty($version)) {
+            return false;
+        }
+    }
+    return false;
+}
\ No newline at end of file
index 9a1d085..057ea84 100644 (file)
@@ -86,7 +86,7 @@ if (!isset($sco)) {
 
 if ($sco->scormtype == 'asset') {
     $attempt = scorm_get_last_attempt($scorm->id, $USER->id);
-    $element = ($scorm->version == 'scorm_13' || $scorm->version == 'SCORM_1.3') ? 'cmi.completion_status':'cmi.core.lesson_status';
+    $element = (scorm_version_check($scorm->version, SCORM_13)) ? 'cmi.completion_status':'cmi.core.lesson_status';
     $value = 'completed';
     $result = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value);
 }
@@ -137,7 +137,7 @@ if (scorm_external_link($sco->launch)) {
 }
 
 // which API are we looking for
-$LMS_api = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'API' : 'API_1484_11';
+$LMS_api = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'API' : 'API_1484_11';
 ?>
 <html>
     <head>
index eef5106..fb6e2eb 100644 (file)
@@ -61,7 +61,7 @@ $PAGE->set_url($url);
 require_login($course, false, $cm);
 
 if ($usertrack = scorm_get_tracks($scoid, $USER->id, $attempt)) {
-    if ((isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} != 'time-out')) || ($scorm->version != "SCORM_1.3")) {
+    if ((isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} != 'time-out')) || (!scorm_version_check($scorm->version, SCORM_13))) {
         foreach ($usertrack as $key => $value) {
             $userdata->$key = addslashes_js($value);
         }
index 982329f..b9f2619 100644 (file)
@@ -678,6 +678,10 @@ function scorm_course_format_display($user, $course) {
         if (! $cm = get_coursemodule_from_instance('scorm', $scorm->id, $course->id)) {
             print_error('invalidcoursemodule');
         }
+        $contextmodule = get_context_instance(CONTEXT_MODULE, $cm->id);
+        if ((has_capability('mod/scorm:skipview', $contextmodule))) {
+            scorm_simple_play($scorm, $user, $contextmodule, $cm->id);
+        }
         $colspan = '';
         $headertext = '<table width="100%"><tr><td class="title">'.get_string('name').': <b>'.format_string($scorm->name).'</b>';
         if (has_capability('moodle/course:manageactivities', $context)) {
@@ -807,7 +811,7 @@ function scorm_view_display ($user, $scorm, $action, $cm) {
     }
 }
 
-function scorm_simple_play($scorm, $user, $context) {
+function scorm_simple_play($scorm, $user, $context, $cmid) {
     global $DB;
 
     $result = false;
@@ -832,12 +836,17 @@ function scorm_simple_play($scorm, $user, $context) {
         }
         if ($scorm->skipview >= 1) {
             $sco = current($scoes);
-            if (scorm_get_tracks($sco->id, $user->id) === false) {
-                header('Location: player.php?a='.$scorm->id.'&scoid='.$sco->id.'&currentorg='.$orgidentifier);
-                $result = true;
-            } else if ($scorm->skipview == 2) {
-                header('Location: player.php?a='.$scorm->id.'&scoid='.$sco->id.'&currentorg='.$orgidentifier);
-                $result = true;
+            $url = new moodle_url('/mod/scorm/player.php', array('a' => $scorm->id,
+                                                                'currentorg'=>$orgidentifier,
+                                                                'scoid'=>$sco->id));
+            if ($scorm->skipview == 2 || scorm_get_tracks($sco->id, $user->id) === false) {
+                if (!empty($scorm->forcenewattempt)) {
+                    $result = scorm_get_toc($user, $scorm, $cmid, TOCFULLURL, $orgidentifier);
+                    if ($result->incomplete === false) {
+                        $url->param('newattempt','on');
+                    }
+                }
+                redirect($url);
             }
         }
     }
@@ -883,7 +892,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
     $count = 0;
     $count_sub = 0;
     $scormseperator = '_';
-    if ($sversion == 'scorm_13') { //scorm 1.3 elements use a . instead of an _
+    if (scorm_version_check($sversion, SCORM_13)) { //scorm 1.3 elements use a . instead of an _
         $scormseperator = '.';
     }
     // filter out the ones we want
@@ -899,7 +908,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
 
     // generate JavaScript
     foreach ($element_list as $element => $value) {
-        if ($sversion == 'scorm_13') {
+        if (scorm_version_check($sversion, SCORM_13)) {
             $element = preg_replace('/\.(\d+)\./', ".N\$1.", $element);
             preg_match('/\.(N\d+)\./', $element, $matches);
         } else {
@@ -926,7 +935,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
         }
 
         // now - flesh out the second level elements if there are any
-        if ($sversion == 'scorm_13') {
+        if (scorm_version_check($sversion, SCORM_13)) {
             $element = preg_replace('/(.*?\.N\d+\..*?)\.(\d+)\./', "\$1.N\$2.", $element);
             preg_match('/.*?\.N\d+\.(.*?)\.(N\d+)\./', $element, $matches);
         } else {
@@ -1110,7 +1119,7 @@ function scorm_get_attempt_count($userid, $scorm, $attempts_only=false) {
     if ($scorm->grademethod == GRADESCOES) {
         $element = 'cmi.core.lesson_status';
     }
-    if ($scorm->version == 'scorm_13' || $scorm->version == 'SCORM_1.3') {
+    if (scorm_version_check($scorm->version, SCORM_13)) {
         $element = 'cmi.score.raw';
     }
     $attempts = $DB->get_records_select('scorm_scoes_track', "element=? AND userid=? AND scormid=?", array($element, $userid, $scorm->id), 'attempt', 'DISTINCT attempt AS attemptnumber');
@@ -1285,9 +1294,6 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
         $usertracks = array();
         foreach ($scoes as $sco) {
             if (!empty($sco->launch)) {
-                if (empty($scoid)) {
-                    $scoid = $sco->id;
-                }
                 if ($usertrack = scorm_get_tracks($sco->id,$user->id,$attempt)) {
                     if ($usertrack->status == '') {
                         $usertrack->status = 'notattempted';
@@ -1303,6 +1309,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
         $nextid = 0;
         $findnext = false;
         $parents[$level]='/';
+        $prevsco = '';
         foreach ($scoes as $pos => $sco) {
             $isvisible = false;
             $sco->title = $sco->title;
@@ -1381,7 +1388,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                         }
                         $strsuspended = get_string('suspended','scorm');
                         $exitvar = 'cmi.core.exit';
-                        if ($scorm->version == 'SCORM_1.3') {
+                        if (scorm_version_check($scorm->version, SCORM_13)) {
                             $exitvar = 'cmi.exit';
                         }
                         if ($incomplete && isset($usertrack->{$exitvar}) && ($usertrack->{$exitvar} == 'suspend')) {
@@ -1407,8 +1414,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                             $previd = $sco->id;
                         }
                     }
-
-                    if ($scorm->version == 'SCORM_1.3') {
+                    if (scorm_version_check($scorm->version, SCORM_13)) {
                         require_once($CFG->dirroot.'/mod/scorm/datamodels/sequencinglib.php');
                         $prereq = scorm_seq_evaluate($sco->id,$usertracks);
                     } else {
@@ -1419,8 +1425,9 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                         if ($sco->id == $scoid) {
                             $result->prerequisites = true;
                         }
-
-                        if ($toclink == TOCFULLURL) { //display toc with urls for structure page
+                        if (!empty($prevsco) && scorm_version_check($scorm->version, SCORM_13) && !empty($prevsco->hidecontinue)) {
+                            $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
+                        } else if ($toclink == TOCFULLURL) { //display toc with urls for structure page
                             $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;currentorg='.$currentorg.$modestr.'&amp;scoid='.$sco->id;
                             $result->toc .= $statusicon.'&nbsp;<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score."\n";
                         } else { //display toc for inside scorm player
@@ -1455,16 +1462,17 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                     $nextid = $nextsco->id;
                 }
             }
+            $prevsco = $sco;
         }
         for ($i=0;$i<$level;$i++) {
             $result->toc .= "\t\t</ul></li>\n";
         }
 
         if ($play) {
-            if (empty($scoid)) {
-                $scoid = reset($scoes)->id;
+            // it is possible that $scoid is still not set, in this case we don't want an empty object
+            if ($scoid) {
+                $sco = scorm_get_sco($scoid);
             }
-            $sco = scorm_get_sco($scoid);
             $sco->previd = $previd;
             $sco->nextid = $nextid;
             $result->sco = $sco;
index 4bf5192..dc2dcab 100644 (file)
@@ -32,10 +32,6 @@ class mod_scorm_mod_form extends moodleform_mod {
         if (!$CFG->slasharguments) {
             $mform->addElement('static', '', '', $OUTPUT->notification(get_string('slashargs', 'scorm'), 'notifyproblem'));
         }
-        $zlib = ini_get('zlib.output_compression'); //check for zlib compression - if used, throw error because of IE bug. - SEE MDL-16185
-        if (isset($zlib) && $zlib) {
-            $mform->addElement('static', '', '', $OUTPUT->notification(get_string('zlibwarning', 'scorm'), 'notifyproblem'));
-        }
         //-------------------------------------------------------------------------------
         $mform->addElement('header', 'general', get_string('general', 'form'));
 
@@ -151,6 +147,7 @@ class mod_scorm_mod_form extends moodleform_mod {
         $mform->addElement('selectyesno', 'hidenav', get_string('hidenav', 'scorm'));
         $mform->setDefault('hidenav', $cfg_scorm->hidenav);
         $mform->setAdvanced('hidenav', $cfg_scorm->hidenav_adv);
+        $mform->disabledIf('hidenav', 'hidetoc', 'noteq', 0);
 
         //-------------------------------------------------------------------------------
         // grade Settings
index f523509..a3d5877 100644 (file)
@@ -32,7 +32,9 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
     var scorm_hide_nav = true;
     var scorm_hide_toc = true;
     if (hide_toc == 0) {
-        scorm_hide_nav = false;
+        if (hide_nav != 1) {
+            scorm_hide_nav = false;
+        }
         scorm_hide_toc = false;
     } else if (hide_toc == 3) {
         scorm_disable_toc = true;
@@ -120,7 +122,7 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
                     var cwidth = scormplayerdata.cwidth;
                     var cheight = scormplayerdata.cheight;
                     var poptions = scormplayerdata.popupoptions;
-                    scorm_openpopup("loadSCO.php?" + node.title, window_name, poptions, cwidth, cheight);
+                    scorm_openpopup(M.cfg.wwwroot + "/mod/scorm/loadSCO.php?" + node.title, window_name, poptions, cwidth, cheight);
                 } else {
                     content.replaceChild(obj, old);
                 }
@@ -146,11 +148,11 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
          * @return void
          */
         var scorm_fixnav = function() {
-            scorm_buttons[0].set('disabled', (scorm_skipprev(scorm_current_node) == null));
-            scorm_buttons[1].set('disabled', (scorm_prev(scorm_current_node) == null));
-            scorm_buttons[2].set('disabled', (scorm_up(scorm_current_node) == null));
-            scorm_buttons[3].set('disabled', (scorm_next(scorm_current_node) == null));
-            scorm_buttons[4].set('disabled', (scorm_skipnext(scorm_current_node) == null));
+            scorm_buttons[0].set('disabled', (scorm_skipprev(scorm_current_node) == null || scorm_skipprev(scorm_current_node).title == null));
+            scorm_buttons[1].set('disabled', (scorm_prev(scorm_current_node) == null || scorm_prev(scorm_current_node).title == null));
+            scorm_buttons[2].set('disabled', (scorm_up(scorm_current_node) == null) || scorm_up(scorm_current_node).title == null);
+            scorm_buttons[3].set('disabled', (scorm_next(scorm_current_node) == null) || scorm_next(scorm_current_node).title == null);
+            scorm_buttons[4].set('disabled', (scorm_skipnext(scorm_current_node) == null || scorm_skipnext(scorm_current_node).title == null));
         };
 
         var scorm_resize_parent = function() {
@@ -183,6 +185,16 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
             }
 
             scorm_layout_widget.setStyle('height', '100%');
+            var center = scorm_layout_widget.getUnitByPosition('center');
+            center.setStyle('height', '100%');
+
+            // calculate the rough new height
+            newheight = YAHOO.util.Dom.getViewportHeight() *.82;
+            if (newheight < 600) {
+                newheight = 600;
+            }
+            scorm_layout_widget.set('height', newheight);
+
             scorm_layout_widget.render();
             scorm_resize_frame();